我知道有很多关于这个主题的指南,我已经阅读了很多关于它的内容,但我想直接问别人并得到关于此的确认。
好的,我的问题。首先,您需要多久使用一次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('<br />', '<br />', $string);
}
return mysql_real_escape_string($string);
}
我将<br />
直接插入数据库,因此为此目的我为htmlspecialchars($string)
创建了一个例外。安全方面对此有何看法?
感谢您的回复。
答案 0 :(得分: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);
}
}