shawlp / interview-codes

1 stars 0 forks source link

web安全及背后对应的解决方案 #10

Open shawlp opened 3 years ago

shawlp commented 3 years ago

几种常见的攻击方式: SQL注入 XSS CSRF 点击劫持 中间人攻击

SQL注入 问题:如果后台人员使用用户输入的数据来组装SQL查询语句的时候不做防范, 遇到一些恶意的输入, 最后生成的SQL就会有问题。 防御:加入过滤和验证机制,可以有效预防SQL注入问题。

XSS 问题:跨站脚本攻击,通过代码注入的方式。 防御: 1.chrome浏览器能自动帮助用户防御攻击 2.字符转义 输入输出的内容,对于引号、尖括号、斜杠等字符进行转义,但链接中如果存在javascript:开头的协议,点击链接还是会执行,需要对url协议进行白名控制,只允许https,http,mailto等安全协议 使用白名单进行过滤标签和属性

3.CSP(Content Security Policy) 通过设置白名单,设置允许浏览器加载哪些外部资源

要开启CSP可以通过两种方式: a.设置 HTTP Header 中的 Content-Security-Policy b.设置 meta 标签的方式 

CSRF 跨站请求伪造,借用用户的身份或权限偷偷的完成操作,借助了cookie(同源策略必携带)的特性 防御:加入各个层级的权限验证

点击劫持 UI-覆盖攻击,在某些操作的按钮上加一层透明的iframe 防御: a.使用HTTP头防御 配置nginx发送X-Frame-Options响应头

该响应头有三个值可选,分别是: DENY,表示页面不允许通过 iframe 的方式展示。 SAMEORIGIN,表示页面可以在相同域名下通过 iframe 的方式展示。 ALLOW-FROM,表示页面可以在指定来源的 iframe 中展示。

b.使用Javascript防御 判断顶层视口的域名是不是和本页面的域名一致,若不一致就让恶意网页自动跳转到我方的页面 if (top.location.hostname !== self.location.hostname) { alert("您正在访问不安全的页面,即将跳转到安全页面!"); top.location.href = self.location.href; }

中间人攻击 中间人攻击(Man-in-the-Middle Attack, MITM)通过拦截正常的网络通信数据,并进行数据篡改和嗅探来达到攻击的目的,而通信的双方却毫不知情

以下是针对防止中间人攻击的一些建议: 确保当前你所访问的网站使用了HTTPS 如果你是一个网站管理员,你应当执行HSTS协议 不要在公共Wi-Fi上发送敏感数据 如果你的网站使用了SSL,确保你禁用了不安全的SSL/TLS协议。 不要点击恶意链接或电子邮件。

还有一个容易被忽略的漏洞 window.opener 带有 target="_blank" 跳转的网页拥有了浏览器 window.opener 对象赋予的对原网页的跳转权限,这可能会被恶意网站利用,例如一个恶意网站在某 UGC 网站 Po 了其恶意网址,该 UGC 网站用户在新窗口打开页面时,恶意网站利用该漏洞将原 UGC 网站跳转到伪造的钓鱼页面,用户返回到原窗口时可能会忽视浏览器 URL 已发生了变化,伪造页面即可进一步进行钓鱼或其他恶意行为:

; 为 target="_blank" 加上 rel="noopener noreferrer" 属性 外跳的地址 还有一种方法是,所有的外部链接都替换为内部的跳转连接服务,点击连接时,先跳到内部地址,再由服务器 redirect 到外部网址 http://xxx.yyy.com;