Web 安全总结
如果两个 URL 的协议、域名和端口都相同,我们就称这两个 URL 同源。
同源策略限制了来自不同源的 JavaScript 脚本对当前 DOM 对象读和写的操作。
同源策略限制了不同源的站点读取当前站点的 Cookie、IndexDB、LocalStorage 等数据。
同源策略限制了通过 XMLHttpRequest 等方式将站点的数据发送给不同源的站点。
解决同源策略的方法:
跨文档消息机制:可以通过 window.postMessage 的 JavaScript 接口来和不同源的 DOM 进行通信。
跨域资源共享(CORS):跨域资源在服务端设置允许跨域,就可以进行跨域访问控制,从而使跨域数据传输得以安全进行。
内容安全策略(CSP):主要以白名单的形式配置可信任的内容来源,在网页中,能够使白名单中的内容正常执行(包含 JS,CSS,Image 等等),而非白名单的内容无法正常执行。
XSS,跨站脚本攻击(Cross Site Scripting) 存储型 XSS 攻击利用漏洞提交恶意 JavaScript 代码,比如在input, textarea等所有可能输入文本信息的区域,输入<script src="http://恶意网站"></script>等,提交后信息会存在服务器中,当用户再次打开网站请求到相应的数据,打开页面,恶意脚本就会将用户的 Cookie 信息等数据上传到黑客服务器。
反射型 XSS 攻击用户将一段含有恶意代码的请求提交给 Web 服务器,Web 服务器接收到请求时,又将恶意代码反射给了浏览器端,这就是反射型 XSS 攻击。 在现实生活中,黑客经常会通过 QQ 群或者邮件等渠道诱导用户去点击这些恶意链接,所以对于一些链接我们一定要慎之又慎。
Web 服务器不会存储反射型 XSS 攻击的恶意脚本,这是和存储型 XSS 攻击不同的地方。
基于 DOM 的 XSS 攻击基于 DOM 的 XSS 攻击是不牵涉到页面 Web 服务器的。它的特点是在 Web 资源传输过程或者在用户使用页面的过程中修改 Web 页面的数据。比如利用工具(如Burpsuite)扫描目标网站所有的网页并自动测试写好的注入脚本等。
预防策略:
将cookie等敏感信息设置为httponly,禁止Javascript通过document.cookie获得
对所有的输入做严格的校验尤其是在服务器端,过滤掉任何不合法的输入,比如手机号必须是数字,通常可以采用正则表达式.
净化和过滤掉不必要的html标签,比如:<iframe>, alt,<script> ;净化和过滤掉不必要的Javascript的事件标签,比如:onclick, onfocus等
转义单引号,双引号,尖括号等特殊字符,可以采用htmlencode编码 或者过滤掉这些特殊字符
CSP,CSP 全称为 Content Security Policy,即内容安全策略。主要以白名单的形式配置可信任的内容来源,在网页中,能够使白名单中的内容正常执行(包含 JS,CSS,Image 等等),而非白名单的内容无法正常执行,从而减少跨站脚本攻击(XSS),当然,也能够减少运营商劫持的内容注入攻击。 配置方式:
//1、meta <meta http-equiv=http://www.mamicode.com/"Content-Security-Policy" content=http://www.mamicode.com/"script-src ‘self‘"> //2、Http 头部 Content-Security-Policy: script-src ‘unsafe-inline‘ ‘unsafe-eval‘ ‘self‘ *.54php.cn *.yunetidc.com *.baidu.com *.cnzz.com *.duoshuo.com *.jiathis.com;report-uri /error/csp
CSRF,跨站请求伪造(Cross-site request forgery)
引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。
发起 CSRF 攻击的三个必要条件:
目标站点一定要有 CSRF 漏洞;
用户要登录过目标站点,并且在浏览器上保持有该站点的登录状态;
需要用户打开一个第三方站点,如黑客的站点等。
预防策略:
充分利用好 Cookie 的 SameSite 属性。
SameSite 选项通常有 Strict、Lax 和 None 三个值。
SameSite 的值是 Strict,那么浏览器会完全禁止第三方 Cookie。
Lax 相对宽松一点。在跨站点的情况下,从第三方站点的链接打开和从第三方站点提交 Get 方式的表单这两种方式都会携带 Cookie。但如果在第三方站点中使用 Post 方法,或者通过 img、iframe 等标签加载的 URL,这些场景都不会携带 Cookie。
而如果使用 None 的话,在任何情况下都会发送 Cookie 数据。 如:
set-cookie: 1P_JAR=http://www.mamicode.com/2019-10-20-06; expires=Tue, 19-Nov-2019 06:36:21 GMT; path=http://www.mamicode.com/; domain=.google.com; SameSite=none
验证请求的来源站点
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/41725.html