问题:如何预防XSS?
Web前端面试题解析:XSS攻击有两大要素:
1.攻击者提交恶意代码。
2.浏览器执行恶意代码。
针对第个要素:我们是否能够在用户输入的过程,过滤掉用户输入的恶意代码呢?
输入过滤
在用户提交时,由前端过滤输,然后提交到后端。这样做是否可行呢?
答案是不可行。旦攻击者绕过前端过滤,直接构造请求,就可以提交恶意代码了。
那么,换个过滤时机:后端在写数据库前,对输进行过滤,然后把“安全的”内容,返回给前端。这样是否可行呢?
我们举个例,个正常的用户输入了57这个内容,在写入数据库前,被转义,变成了57。问题是:在提交阶段,我们并不确定内容要输出到哪。
这的“并不确定内容要输出到哪”有两层含义:
1.用户的输入内容可能同时提供给前端和客户端,而旦经过了escapeHTML(),客户端显示的内容就变成了乱码(57)。
2.在前端中,不同的位置所需的编码也不同。
当57作为HTML拼接页面时,可以正常显示:
divtitle=