0

嗨,关于 XSS 和 PHP 的问题......

我正在构建一个 PHP 应用程序,所有输入都通过客户端然后服务器端验证进入数据库,使用 filtervar 进行清理.....存储在数据库中的加密密码,如果我输入 scripttag -- 不管 -- 它得到的脚本标记就这样存储在数据库中,它不会在那里造成任何伤害。

当输入被直接输出时,XSS 是否只是一种威胁,并且使用 htmlentities 的唯一时间是在输出用户输入的数据时。

我的应用程序不这样做,但是有没有办法让攻击者注入一些恶意代码并导致它被输出,即使我的编程逻辑不允许这样做。

我想覆盖所有基地......

期待您的回答............是的,我正在使用 PDO 准备语句、bindParam、执行以防止 SQL 注入,并将数据安全地存储在数据库中,我也在使用:

 if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){
            $clean['firstname'] = $_POST['firstname'];
            };      

对于消毒可以改进............

我刚刚修复了代码,if 语句阻止了 filter var 清理脚本标签,如下所示:

$clean =  array();
        $clean['firstname'] = (filter_var($_POST['firstname'],     FILTER_SANITIZE_STRING));


            $clean['lastname'] = (filter_var($_POST['lastname'], FILTER_SANITIZE_STRING));


            $clean['username'] = (filter_var($_POST['username'], FILTER_SANITIZE_STRING));  

现在脚本标签不再在数据库中......

4

2 回答 2

1

输入

如果您使用 filtervar 正确地清理或验证了事物,那么您可能在数据库端没有任何问题。有时很难知道你是否已经覆盖了所有的基础。您的数据库查询可能仍应使用参数化查询来保护您。

输出

如果其他用户可以看到任何用户输入,则应正确转义目标内容类型的数据;即使是用户名之类的东西也可能是恶意的。

于 2013-02-06T15:39:54.270 回答
0

如果您展示了一些关于如何使用 filter_var() 的代码示例,那就太好了。但是,总的来说,这里有一些事情需要考虑:

  • filter_var() 可以是一个很好的工具。此外,您可以查看 HTMLPurifier 库。我在这方面取得了很大的成功。目标是在不良内容进入数据库之前将其删除。
  • 使用准备好的语句将数据插入数据库。虽然这在仅用于单个查询时有一点额外的权重,但它是直接将数据插入数据库的最佳方法,并且 sql 注入的风险最小。
  • 输出数据时使用 htmlentities()正确的编码。例如,不允许在您的数据库中使用 UTF-8 数据但输出 ISO 8859-1 输出。我总是建议确保您的文档编码、数据库和所有过滤方法都使用相同的编码,最好是 UTF-8
  • 不要忘记 $_SERVER 在 PHP 中是不干净的。很多人做了大量的过滤和 HTML 实体,但是在表单中使用了未经处理的 $_SERVER['REQUEST_URI'] 版本

如果您需要具体帮助,请发布代码示例。

于 2013-02-06T15:45:05.347 回答