-2

我已经创建了一个函数来处理 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);
    }
}
4

3 回答 3

1

你在错误的地方做这项工作。

为防止 SQL 注入,请使用 PDO 准备好的/参数化查询。这从根本上将数据与命令分开,使其免受一般 SQL 注入问题的影响。

毫无疑问,您的 XSS 问题是因为您在 HTML 上下文中使用任意数据而没有任何转义。在输出数据时,使用htmlspecialchars(). 这会将所有特殊字符编码为适当的实体。

于 2013-06-04T19:15:04.130 回答
0

您拥有的代码使您的输入可以安全地插入数据库。但是,对数据库安全的内容可能对 HTML 不安全。

通常,您应该使用该函数来插入数据,然后当您稍后检索它时,您可以htmlspecialchars在输出之前运行它。但是,在保存数据之前不要这样做,只能在最终输出阶段进行。

于 2013-06-04T19:14:41.353 回答
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 &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;

然而,这种解决方案并不理想。在保存到数据库之前,您不应该转换数据。相反,您希望在从数据库中查询数据后对其进行处理。

于 2013-06-04T19:15:16.023 回答