XSS攻击
跨站脚本攻击,代码注入攻击,为了获取用户敏感信息如Cookie、SessionId。
两大要素:攻击者提交恶意代码,浏览器执行恶意代码
场景
- 存储型:sql注入,恶意代码提交到数据库,页面渲染的时候在页面执行。使用Sequelize可以预防,不用刻意去解决。只要不裸写sql语句,常见的数据库工具,都可以解决sql注入的问
- 反射型:恶意代码在URL
-
防御手段
过滤代码提交,禁止恶意代码执行。
1、模板引擎一般都对XSS攻击做了防护。 通过vue和react可以防止,h5也可以通过vue ssr防止。 vue中输出原生html要用v-html
- React要用danerouslySetInnerHtml
- 如果想要单独处理,用
2、CSP 1.0内容安全策略,禁止加载不该加载的脚本。
CSP2.0 扫描所有的JavaScript脚本,并加上nonce字段,这个字段由服务端生成。浏览器只会允许带有nonce的脚本执行,其他脚本都不会执行。
CSRF攻击
跨站请求伪造,主要是冒充用户cookie,躲开服务端的验证。
攻击者诱导受害人进入第三方网站,在第三方网站中向攻击网站发送跨站请求,利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击者网站执行某些操作的目的。
【有三种类型】
防御手段
- 提交数据用post请求
- jwt有token检查
- Samesite Cookie
- 同源检测,阻止外域请求。
- 检测请求头的Origin、Referer字段
- CSRF Token
- 讲CSRF Token输出到页面中,带到请求头上,不要放在Cookie中。
- 双重Cookie验证:
- 通过验证码去验证
越权漏洞
跨域
【定义】
浏览器的安全策略,限制一个源的文档或者它加载的脚本如何与另一个源进行交互,为了阻止恶意文档,减少被攻击。
【限制的对象】
- Cookie、LocalStorage、IndexedDb的存储性内容
- DOM节点
- XMLRequest
- 允许加载跨域资源的三个标签:img、Link、script
【解决手段】
- CORS:跨域资源共享
- Access-Control-Allow-Origin
- Access-Control-Request-Method
- Aceess-Control-Request-Headers
- Node中间件代理
- Nginx反向代理
- JSONP
- 利用script标签和img标签获取资源没有跨域限制的漏洞,网页可以得到其他源动态得到的JSON数据,兼容性好。
- 实现:声明一个回调函数callback,window[callback] = function (data){…}
创建script,把script的src赋值为请求,callback作为请求的参数传递给后端。
服务端接收到请求后,返回callback(res)。
客户端会执行window[callback]这个函数。
- window.postMessage
- 允许来自不同源(协议、域名、端口)进行通信,实现跨文本当,多窗口,跨域通信。
- window.name+iframe
- window.name当window的location变化重新加载,值不变。利用它来传输数据。
- 在页面A用iframe加载其他域的页面B,页面B赋值window.name。
然后A完成加载后,修改iframe的地址未同域的地址,这样就可以拿到window.name的值。
开发Node时遇到的安全问题
使用非root用户运行Nodejs
使用子进程的时候要格外小心
尽可能避免使用子进程childProcess
,如果必须这样做,必须验证和清理以减轻shell注入攻击。childProcess.execFile
可以执行单个命令,可以对命令做白名单处理。
不安全的npm包
20%的npm包不安全,危害
- 随着应用重启,npm包内的脚本会主动运行,可以执行各种命令。
- 很多包甚至带有挖矿脚本,在计算机后台
解决:
npm audit
审计依赖是否安全npm audit fix
可以自动修复该库的风险,原理就是升级依赖库,升级至已修复了风险的版本号 ```javascript $ npx snyk
$ npx wizard ```
- 通过 CI/gitlab/github 中配置机器人,使他们每天轮询一次检查仓库的依赖中是否有风险。
在 Github 中,可单独设置 dependabot 机器人,在仓库设置中开启小机器人,当它检测到有问题时,会自动向该仓库提交 PR,而它的解决方案升级版本号。网络端口
服务器只开放80 和443端口,其它由nginx去做转发,通过内外访问就可以绕开防火墙的限制。网络攻击
中小型网站容易受到DDOS攻击,用第三方服务来解决,比如阿里云的Web应用防火墙,简称WAF,价格便宜(一年200块),能够预防常见的网络攻击。