我最近在如何做到这一点上阅读了很多不同的想法。我正在运行php 5.5和mysql 5.6,我正在使用PDO编写的语句。
PDO应该事先不要求卫生,所以为什么我会看到这么多对filter_input和filter_var的引用?
FIEO与PDO有关吗?下面是查询和回显的简单示例。我最终应该如何以不同方式进行设置?
$name = "John";
$query = $db->prepare("SELECT `name` FROM `users` WHERE `name`=?");
$query->bindValue(1, $name);
try{
$query->execute();
$row = $query->fetch();
} catch(PDOException $e){
die($e->getMessage());
}
echo "Name is " . $row['name'] . ".";
我期待最终理解正确的安全编码。
答案 0 :(得分:0)
filter_var
不是只是用于清理输入;还有一些验证过滤器可用于类型检查(http://www.php.net/manual/en/filter.filters.validate.php)和处理指令(http://www.php.net/manual/en/filter.filters.flags.php)。
在切线上注意:
还有使用存储数据的整个概念;仅仅因为您可能或多或少地对SQL注入安全不意味着您的数据可以安全地消费。您仍然必须确保您的数据不包含恶意内容(例如,检查在接受用户的HTML内容时呈现为可执行JavaScript的编码文本)。
如果您想在上面提到的示例中看到一些需要注意的事项示例,我发现HtmlSanitizer库的测试套件非常有趣:https://github.com/mganss/HtmlSanitizer/blob/master/HtmlSanitizer.Tests/Tests.cs
答案 1 :(得分:-1)
作为参数传递给预准备语句的变量将自动由底层驱动程序转义,这有助于防止SQL注入。
尽管Prepared Statements有助于防范SQL注入,但是通过不恰当地使用Prepared Statements可能会导致SQL注入攻击
String strUserName = //retrieved from webpage via text field
$query = $db->prepare("SELECT `name` FROM `users` WHERE `name`=strUserName ");