仅仅是防止get/post输入中的任何html标记(已编码/未编码)就可以防止xss攻击吗?此外,服务器端的动态数据(故意的)不包含任何html标记。
一个中间件可以简单地阻止html标记,该中间件检查在任何get/post请求中是否存在任何html标记。
我所有的静态字符串都是安全的,只有动态字符串才是我要担心的,动态字符串要么来自客户机(带有get/post请求)要么来自数据库,那么如果我能确保这些字符中没有任何一个是来自客户机或数据库的动态字符串,[“,',,&],我能避免xss吗?
最佳答案
即使您要防止[“,”,,&]也可能注入错误代码。它总是取决于你如何处理发送的数据。你想展示它吗?如果是这样,为什么不使用HTMLPARTHARCHS等效的、已经存在的测试函数呢?
如果只不允许使用上述字符,根据插入数据的位置,您仍然可能受到感染。想象一下:
<img src="...." <?=$_GET['data']; ?> />
通过插入onclick=alert(document.cookie),您还可以执行代码。
正如我所说,这取决于您插入数据的位置,但是对XSS(以及其他所有潜在的攻击向量)的最佳实践是使用强测试的、众所周知的、已经存在的函数。
此外,这也会导致潜在的安全问题:
<a href="<?=$_GET['data']; ?>">sometext</a>
…如果要插入类似javascript:alert(document.cookie)或类似的内容。