📜  xss - Javascript (1)

📅  最后修改于: 2023-12-03 15:21:19.732000             🧑  作者: Mango

XSS攻击与防范

XSS(Cross-Site Scripting),跨站脚本攻击,是指攻击者在注入恶意脚本进入网页中,使得用户在访问该网页时,恶意脚本被执行,从而达到攻击者的特定目的。

XSS攻击的种类
反射型XSS攻击

反射型XSS攻击,也称非持久性XSS攻击,是指攻击者对目标网站构造恶意链接或提交恶意表单等,从而使得被攻击者在访问网站时注入恶意脚本,使得该脚本被执行。该攻击方式具有针对性,但攻击效果较难控制。

存储型XSS攻击

存储型XSS攻击,也称为持久性XSS攻击,是指攻击者通过提交恶意数据,将恶意脚本存储在网站的数据库或缓存系统中,从而使得被攻击者访问该网站时,恶意脚本被执行。该攻击方式效果明显,但比较繁琐。

DOM型XSS攻击

DOM型XSS攻击是指攻击者利用DOM解析漏洞,生成新的HTML,以执行恶意脚本的攻击方式。

XSS攻击的危害
盗取cookie

攻击者可以通过恶意脚本获取用户的cookie信息,并利用该信息假冒用户身份进行非法活动。

篡改页面

攻击者可以通过XSS攻击,更改网页内容,包括HTML元素,链接等等。

数据窃取

攻击者可以通过XSS攻击,窃取网页上的各类数据,如用户名,密码等等。

XSS攻击的防范
输入检查与过滤

在接受用户的输入时,进行输入检查与过滤,从而避免恶意脚本的注入。

常见的输入检查与过滤方式有:

  1. 输入长度限制
  2. 输入类型限制
  3. 过滤特殊字符
  4. 对HTML元素进行编码
输出编码

在输出到HTML页面上的数据中,对特殊的字符进行编码,以避免脚本的注入。

CSP

CSP(Content Security Policy),内容安全策略,是一种新型的安全机制,它能够帮助防止XSS攻击。CSP的核心是域白名单,即指定可执行脚本的源地址,从而避免恶意脚本的注入。

HttpOnly

在给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实体化,例如将<字符转化为<,从而避免脚本注入。