[英]Securing site against XSS attacks
我有一个电子商务网站,必须符合PCI标准。 我遇到的问题是它在XSS攻击时失败了:
www.mydomain.com?qs=%3c%2fscript%3e%3c script%3ealert(12345)%3c%2fscript%3e
在.htaccess中是否有一种方法可以删除任何恶意脚本标记并将用户重定向到另一个页面? 还是我在错误的树上吠叫?
最好的方法是不要信任代码中的用户输入。 例如,永远不要将用户提供的数据回送到浏览器,而不通过htmlspecialchars或类似的方式运行它。 这与SQL注入攻击属于同一类别,除了注入针对生成的HTML代码而不是SQL查询。
用户提供的数据是可能从客户端篡改的所有数据。 这包括:$ _POST,$ _GET,文件上传,cookie和HTTP标头(如User-Agent和Referer)。 必须始终将此类数据视为不可信,并且需要为每个上下文保护这些数据。 您要将数据插入数据库吗? 在将数据放入查询之前将其转义(或使用预准备语句)! 你打算将它输出到用户的浏览器吗? 逃离htmlspecialchars! 它应该是一个电子邮件地址吗? 在插入电子邮件之前确保它确实存在!
请注意,即使将数据保存到数据库中,某些上下文的数据也可能不安全。 例如,正确SQL转义的$ _POST数据可能仍然包含HTML标记或其他XSS数据,因此在将其发送到浏览器之前需要进行转义(我在这里想说的是user-provided
标签)不会因为您将数据保存在数据库或文件中而消失。 防止这种情况的一个好方法是尽可能晚地为每个上下文进行转义 (例如,在回显之前的htmlspecialchars),以确保所使用的转义方法对于此上下文是正确的,但也要尽早进行验证尽可能(不要首先接受无效数据,例如,验证电子邮件地址并在错误时抛出错误)。
还有针对Apache的ModSecurity扩展,它将捕获大多数这些攻击,但它并非万无一失,因为有几乎无穷无尽的方法来制作注入。 因此,只有在您已经保护应用程序代码但又担心由于未来的错误(可能以某种方式或其他方式发生在我们大多数情况下)可能会遗漏某些内容时,才应使用ModSecurity。
为什么不清理代码中的$ _GET变量?
是的,我确实相信。 见http://www.simonecarletti.com/blog/2009/01/apache-query-string-redirects/
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/page\.php$
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^(.*)$ http://mydomain.site/page/%1.pdf [R=302,L]
注意正则表达式。 这应该意味着你可以设计你的正则表达式来适应你想要阻止的事情。 Google正则表达式引用并查看其中的大量内容。
请记住,htaccess文件将影响其所在的任何目录和所有子目录。 这里有很多很好的.htaccess提示,包括重定向http://www.sitepoint.com/htaccess-for-all/
检查以下htaccess方法是否有助于您的案例http://wp-mix.com/block-xss-htaccess/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.