清理此STRING以防止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';
}
我现在用它,它似乎对我有用。
答案 0 :(得分:1)
鉴于答案没有回答这个问题。
虽然没有办法进行通用的“字符串清理”,但可能会注意到给定的字符串是非常特殊的字符串。
清除它的唯一方法是白名单。
清理此字符串的最佳方法是将两个部分分开,然后再针对白名单进行检查。
所以,我没有将这个字符串整齐,而是将它包含在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";
答案 1 :(得分:-2)
$order_by_str = mysql_real_escape_string('dest ASC');
希望这就是你要找的东西!!!