📅  最后修改于: 2023-12-03 15:21:19.732000             🧑  作者: Mango
XSS(Cross-Site Scripting),跨站脚本攻击,是指攻击者在注入恶意脚本进入网页中,使得用户在访问该网页时,恶意脚本被执行,从而达到攻击者的特定目的。
反射型XSS攻击,也称非持久性XSS攻击,是指攻击者对目标网站构造恶意链接或提交恶意表单等,从而使得被攻击者在访问网站时注入恶意脚本,使得该脚本被执行。该攻击方式具有针对性,但攻击效果较难控制。
存储型XSS攻击,也称为持久性XSS攻击,是指攻击者通过提交恶意数据,将恶意脚本存储在网站的数据库或缓存系统中,从而使得被攻击者访问该网站时,恶意脚本被执行。该攻击方式效果明显,但比较繁琐。
DOM型XSS攻击是指攻击者利用DOM解析漏洞,生成新的HTML,以执行恶意脚本的攻击方式。
攻击者可以通过恶意脚本获取用户的cookie信息,并利用该信息假冒用户身份进行非法活动。
攻击者可以通过XSS攻击,更改网页内容,包括HTML元素,链接等等。
攻击者可以通过XSS攻击,窃取网页上的各类数据,如用户名,密码等等。
在接受用户的输入时,进行输入检查与过滤,从而避免恶意脚本的注入。
常见的输入检查与过滤方式有:
在输出到HTML页面上的数据中,对特殊的字符进行编码,以避免脚本的注入。
CSP(Content Security Policy),内容安全策略,是一种新型的安全机制,它能够帮助防止XSS攻击。CSP的核心是域白名单,即指定可执行脚本的源地址,从而避免恶意脚本的注入。
在给cookie设置时,设置HttpOnly属性,使得cookie只能被浏览器访问,从而避免被注入恶意脚本窃取。
<div class="comment">
<h3>评论区</h3>
<ul>
<% comments.forEach(function(comment) { %>
<li>
<strong><%= comment.author %></strong>
<span><%= comment.content %></span>
</li>
<% }); %>
</ul>
</div>
上述代码使用了模板引擎EJS生成评论内容,在输出到HTML页面时应该对HTML元素进行编码:
<div class="comment">
<h3>评论区</h3>
<ul>
<% comments.forEach(function(comment) { %>
<li>
<strong><%= comment.author %></strong>
<span><%= htmlentities(comment.content) %></span>
</li>
<% }); %>
</ul>
</div>
其中,htmlentities函数是指对字符进行HTML实体化,例如将<字符转化为<,从而避免脚本注入。