我对防止XSS漏洞的了解很少,特别是对于表单输入而言,不允许使用像<,>这样的特殊字符。但是,我的问题是Ajax:
获取请求:如何有效地阻止查询字符串参数。
POST请求:通过POST请求发送的数据是否仍然是XSS攻击的原因或POST请求阻止XSS攻击。
请帮助我理解这一点。
答案 0 :(得分:2)
你必须要了解的关于XSS的第一件事是它针对的是浏览器,而不是服务器。如果在GET或POST请求中注入了标记,则这与服务器无关。只关注您如何将数据呈现给用户。
假设您在数据库中有一个字段,其中的内容是用户生成的输入。在向任何观看者展示这些数据时,过滤它以获取HTML标签,或者在存储之前对其进行过滤,顺序并不重要。
然而,你似乎没有想象出这种不同形式的XSS攻击。外部站点向您的URL生成URL和POST请求。这是合法的,必须加以处理,以防止像changepassword.php?newpass=hacked
这样的事情(粗略的例子)。与此相当的POST也是可能的。
许多网站所做的是生成通常所称的" postkey",一个随机值或短语,它生成并绑定到用户的当前会话并附加到所有POST和GET调用修改信息,可以是查询字符串变量(GET)的形式,也可以是表单中的隐藏字段(POST)。所有重要的POST和GET都应该包含它以进行验证。
外部攻击者无法知道密钥是什么,因为他们无法做到"跨站点阅读"在成功进行XSS攻击之前,任何向您的网站提交POST或GET请求的尝试都将丢失此密钥,并且应该是无害的。