清理此字符串以防止 SQL 注入的最佳方法是什么?
$order_by_str = 'dest ASC';
编辑
$whitelist = array('start','target','exec');
if ( in_array( $order_by, $whitelist ) ) {
$order_by_str = $order_by;
} else {
$order_by_str = 'start';
}
我现在用这个,它似乎对我有用。
清理此字符串以防止 SQL 注入的最佳方法是什么?
$order_by_str = 'dest ASC';
编辑
$whitelist = array('start','target','exec');
if ( in_array( $order_by, $whitelist ) ) {
$order_by_str = $order_by;
} else {
$order_by_str = 'start';
}
我现在用这个,它似乎对我有用。
给出的答案不回答问题。
虽然没有办法用于通用的“字符串清理”,但人们可能会注意到给定的字符串是一个非常特殊的字符串。
对其进行消毒的唯一方法是列入白名单。
清理此字符串的最佳方法是将两个部分分开,然后都检查白名单。
因此,我没有将这个字符串放在整个字符串中,而是将它放在 2 个变量中,$_GET['orderby']
并且$_GET['dir']
.
所以代码是
$allowed = array("dest","foo","whatever");
$key = array_search($_GET['orderby'], $allowed));
$orderby = $allowed[$key];
$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC';
$query = "SELECT * FROM t ORDER BY $orderby $dir";
$order_by_str = mysql_real_escape_string('dest ASC');
希望这就是你要找的!!!