-4

清理此字符串以防止 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';
}

我现在用这个,它似乎对我有用。

4

2 回答 2

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";
于 2013-09-20T14:23:21.483 回答
-2
$order_by_str = mysql_real_escape_string('dest ASC');

希望这就是你要找的!!!

于 2013-09-20T14:09:51.557 回答