我已经完成了处理CSS和XSS注入的功能,但它仍然可以通过。
有人对我说了以下内容,但我不确定这意味着什么:
在sanitize_input函数上,执行strip_tags以删除可能已通过表单添加的所有html标记。在strip_tags上阅读php.net。
这是我的代码:
private function sanitizeInput() {
foreach($_POST as &$post) {
$post = $this -> db -> real_escape_string($post);
}
}
答案 0 :(得分:1)
你在错误的地方做工作。
为防止SQL注入,use prepared/parameterized queries with PDO。这从根本上将数据与命令分开,使其免受一般SQL注入问题的影响。
您对XSS的问题无疑是因为您在HTML上下文中使用任意数据而没有任何转义。在数据的输出上,使用htmlspecialchars()
。这会将所有特殊字符编码为正确的实体。
答案 1 :(得分:0)
您拥有的代码可以安全地输入数据库。但是,对数据库来说安全的可能对HTML不安全。
通常,您应该使用该函数来插入数据,并在以后检索它时,在输出之前通过类似htmlspecialchars
的函数运行它。但是,请勿在保存数据之前执行此操作,只能在最终输出阶段执行此操作。
答案 2 :(得分:0)
这取决于......您希望能够保存标签,但不能在浏览器中呈现它们吗?如果是这样,请使用htmlentities。如果没有,请使用strip_tags。
也许:
private function sanitizeInput() {
foreach($_POST as $key => $val) {
$_POST[$key] = $this->db->real_escape_string(htmlentities($val, ENT_QUOTES));
}
}
这实际上取决于你想要完成的事情。
上面的示例会将A 'quote' is <b>bold</b>
转换为A 'quote' is <b>bold</b>