XSS PHP输入/输出


XSS PHP Input/Output

关于XSS和PHP的问题。。。。。。

我正在构建一个PHP应用程序,所有输入都将通过客户端然后服务器端验证、使用filtervar进行净化。。。。。存储在数据库中的加密密码,如果我键入scripttag——不管怎样——脚本标记,它就会被存储在数据库里,不会对数据库造成任何伤害。

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

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

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

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

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

对于消毒,可以在上改进吗

我刚刚修复了代码,if语句阻止了过滤器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));  

现在脚本标记已不在数据库中。。。。。。。。。

输入

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

输出

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

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

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

如果您想要特定的帮助,请张贴代码示例。