Is htmlentities() and mysql_real_escape_string() enough for cleaning user input in PHP?
我是PHP的新手,基本上我正在尝试为我的网站创建一个评论系统。 我有以下功能:
$input = $_POST['comment'];
function cleanUserInput($input) {
$input = mysql_real_escape_string($input);
$input = htmlentities($input);
return $input; }
所以问题是,mysql_real_escape_string是否足以阻止sql注入? 并且htmlentities()是否足以阻止用户输入的脚本,html和样式具有实际效果并且只显示为文本?
或者我是否需要在我的函数中添加更多内容才能使输入真正无害?
mysql_real_escape_string是不够的。您还必须考虑如何构建查询。请考虑以下简单的登录脚本:
1 2 3 | $username = mysql_real_escape_string($_GET['username']); $password = mysql_real_escape_string($_GET['password']); $sql ="SELECT * FROM users WHERE username = $username AND password = $password"; |
如果没有
如果正确构造查询,则从清理点开始,mysql_real_escape_string就足够了。对于正确构造的查询,这很好。
一个更好的问题是"你想阻止什么?"您还应该了解存储和反映的XSS(跨站点脚本)。如果要存储数据库中用户的输入并且数据在浏览器中呈现,则至少要删除
根据您的语言,有许多过滤器和代码可供使用。如果您使用Rails或CodeIgniter,它就是为您完成的。
就这种类型的安全性而言,我建议使用以下内容:
底线 - 如果它来自用户,则无法信任!
这两个函数确实解决了关于任何类型注入和更多问题的安全问题的主要部分,但是,您的应用程序可能具有的安全错误数量是惊人的。
如果你是一个安全怪物,那么你就会遇到重大问题,但是你可以通过检查Chris Shiftlett的网站来做到这一点,该网站是全球PHP安全的主要权威之一。
最后,您可以查看OWASP网站和他们的十大项目,在那里他们跟踪最常见的安全威胁,并保持对hw的更新以对抗它们,
希望我能提供帮助。
如果您使用的是PHP 5.2或更高版本,则可以使用内置输入清理。
例如:
参考文献: