安全

77 阅读3分钟

XSS

跨网站指令码(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程式的安全漏洞攻击,是代码注入的一种。它允许恶意使用者将程式码注入到网页上,其他使用者在观看网页时就会受到影响。这类攻击通常包含了 HTML 以及使用者端脚本语言。

XSS 分为三种:
    反射型
    存储型
    DOM-based

如何攻击
    通过URL获取name,<div>{{name}}</div>,攻击:<!-- http://www.domain.com?name=<script>alert(1)</script> -->。这种是反射型攻击也可以说是DOM-based攻击
    写了一篇包含攻击代码的文章,浏览文章的用户都会被攻击,这种是存储型攻击也可以说是DOM-based攻击

如何防御
    转义或者正则判断
    白名单


CSP
内容安全策略 (CSP) 是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS) 和数据注入攻击等。无论是数据盗取、网站内容污染还是散发恶意软件,这些攻击都是主要的手段。
可以通过 HTTP Header 中的 Content-Security-Policy 来开启 CSP,尽量减少 XSS 攻击。CSP 本质上也是建立白名单,规定了浏览器只能够执行特定来源的代码。
    Content-Security-Policy: default-src ‘self’     // 只允许加载本站资源
    Content-Security-Policy: img-src https://*      // 只允许加载 HTTPS 协议图片
    Content-Security-Policy: child-src 'none'       // 允许加载任何来源框架

CSRF

跨站请求伪造(英语:Cross-site request forgery),通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的 Web 应用程序上执行非本意的操作的攻击方法,利用用户的登录态发起恶意请求。

如何攻击
    假设网站中有一个通过 Get 请求提交用户评论的接口,那么攻击者就可以在钓鱼网站中加入一个图片,图片的地址就是评论接口,如果接口是 Post 提交的,就用表单来提交接口。
    ```
        <img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/61b53529de974744a8bfed0159fd9aad~tplv-k3u1fbpfcp-zoom-1.image" />

        <form action="http://www.domain.com/xxx" id="CSRF" method="post">
            <input name="comment" value="attack" type="hidden" />
        </form>
    ```

如何防御
    SameSite
        对 Cookie 设置 SameSite 属性。该属性设置 Cookie 不随着跨域请求发送,该属性可以很大程度减少 CSRF 的攻击,但是该属性目前并不是所有浏览器都兼容
    验证 Referer
        验证 Referer 来判断该请求是否为第三方网站发起的
    Token或者验证码
        服务器下发一个随机 Token(算法不能复杂),每次发起请求时将 Token 携带上,服务器验证 Token 是否有效

密码安全

不能明文存储在数据库中的,否则一旦数据库泄露,会对用户造成很大的损失。并且不建议只对密码单纯通过加密算法加密,因为存在彩虹表的关系。
通常需要对密码加盐(给原密码添加字符串,增加原密码长度),然后进行几次不同加密算法的加密。
使用验证码增加延时或者限制尝试次数的方式。
一旦用户输入了错误的密码,也不能直接提示用户输错密码,而应该提示账号或密码错误。