0

可能重复:
防止 SQL 注入的最佳方法?

我知道有很多关于这个主题的指南,我已经阅读了很多关于它的内容,但我想直接询问某人并得到确认。

好的,我的问题。首先,你需要多久使用一次mysql_real_escape_string。

例如,如果我有一个查询:

"SELECT * FROM tabel WHERE id = $_POST['id'] and email LIKE '%hotmail.com' and row = 2"

我到底需要什么才能逃离这里?$_POST 就足够了,还是我应该使用查询中的所有变量?(saferize(2), saferize(%hotmail.com))?

我的另一个问题是这个功能是否适合消毒?

function saferize($string) {
    if(get_magic_quotes_gpc() == true) { 
        $string = stripslashes($string);
    }
    $string = htmlspecialchars($string);
    if(strpos($string, '<br />')){
        $string = str_replace('&lt;br /&gt;', '<br />', $string);
    }
    return mysql_real_escape_string($string);
}

<br />直接插入到数据库中,所以我htmlspecialchars($string)为此目的做了一个例外。对此有何安全考虑?

谢谢您的回复。

4

1 回答 1

0

如果 $_POST['id'] 是整数,您可以将其显式转换为整数并在查询中使用结果

$id = (int)$_POST['id']
"SELECT * FROM tabel WHERE id = $id and email LIKE '%hotmail.com' and row = 2"

或使用 PDO 准备好的语句

$stmt = $dbh->prepare("SELECT * FROM tabel WHERE id = ? and email LIKE '%hotmail.com' and row = 2");
if ($stmt->execute(array($_POST['id']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
于 2012-11-15T09:46:55.930 回答