web问题非常常见,需要重视。
一、针对xss攻击的防御
核心是不要相信用户提交的内容,不要将用户提交的内容直接转换成DOM,更应该把用户提交的内容当作字符串来对待。对于前端来说,主流的框架都默认防御xss,google-closure-library提供了各种完善的防御xss攻击的函数,对于写服务端代码而言,可以利用DOMPurify来进行转译,从而避免xss攻击。
如果用户要求string生成DOM,则需要对string进行转译;如果允许用户上传svg文件,也要对svg文件进行扫描;同时尽量不要让用户做自定义跳转行为,如果允许自定义跳转链接,一定要做好过滤。
CSP允许开发者定义安全的源/域名,来自安全源的脚本可以执行,否则直接报错,此外也可以对eval+inline script直接报错。
二、针对CSRF攻击的防御
如果伪造请求的来源是异常来源,那么限制请求来源就可以限制伪造请求,开发者可以对Origin或Referer进行校验。
如果请求来自合法页面,那么服务器接收过页面请求,则会有一定标记。浏览器向服务器端发出接收页面的请求,返回页面和具体的token,浏览器在之后请求API时会带上token,服务器端则对token进行校验,如果校验不通过则直接报错,不返回,如果通过则返回正式数据。token往往和具体用户进行绑定,才能确保不会被其他用户进行利用。token需要有过期时间。
对于iframe攻击的同源请求,可以设置X-frame-options。
另一种防御方式是Samesite cookie,限制的是cookie的domain属性和当前页面域名是否匹配。
通过本节课的学习我对如何防御各类攻击类型有了简单了解,也明白了web安全的重要性。