这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
网络安全出现问题,会造成很多危害。比如用户信息泄露、公司利益受损,还可能导致程序员祭天。因此,作为开发者,对web开发安全必须要有清晰的认识,在开发阶段就规避掉大部分的安全隐患。使上线后不会被攻击的焦头烂额。
web安全之攻击篇
Cross-site Scripting (XSS)
没有将用户提交的内容进行转义或过滤,直接将用户提交内容转化为DOM,这样就会导致XSS攻击。如果提交的内容植入一些恶性脚本,这些脚本有可能会诱导用户点击,给用户造成损失。还很有可能提取到其他用户的token或cookie导致用户信息被窃取。
Cross-site request forgery (CSRF)
在用户不知情的情况下,拿到用户的cookie,利用该用户的权限构造指定的HTTP请求,窃取或修改用户敏感信息。
SQL Injection(SQL注入)
在提交的表单中,写入恶性SQL脚本。如果没做好防护,有可能导致即使没有输入正确的用户名和密码也可以进入应用页面,更严重的是还有可能传入的脚本是删除所有数据表,直接导致被动删库跑路。除了SQL注入之外还有CLI注入,OS command注入等。
DDos
直接多次访问IP,多次调用API,消耗了服务器大量的带宽,导致服务器直接崩掉。
web安全之防御篇
XSS防御
解决方法 1.永远不要相信用户提交的任何内容
2.不要将用户提交的内容转化为dom 常用工具 前端:主流框架默认防御XSS。google-closure-library 服务端: Dom-purify
CSRF防御
如果发现请求的来源有异常,就对这个来源的请求进行限制,从而达到限制伪造请求。node中可以通过在中间件最外层加入CSRF防御中间件,直接把这些异常请求过滤掉就行了。
SQL注入防御
找到项目中查询SQL的地方,使用prepared statement
DDos防御
使用负载均衡和API网关来对流量进行治理,使用快速自动拓容,非核心服务降级来提升服务器的抗量。