XSS PHP输入/输出

时间:2013-02-06 15:36:43

标签: php xss

您好关于XSS和PHP的问题......

我正在构建一个PHP应用程序所有输入都是通过客户端进入数据库然后服务器端验证,使用filtervar进行清理......存储在数据库中的加密密码,如果我在scripttag中输入类型 - 无论什么 - 脚本标记它只是存储在数据库中,并且不会对它造成任何伤害。

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

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

我希望涵盖所有基地.........

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

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

对于Sanitization,可以改进............

我刚刚修复了代码,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));  

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

2 个答案:

答案 0 :(得分:1)

输入

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

输出

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

答案 1 :(得分:0)

如果你展示了一些如何使用filter_var()的代码示例,那就太棒了。但是,一般来说,有些事情需要考虑:

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

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