专注于Java领域优质技术,欢迎关注
作者:想要好看的 图灵社区
本文配图来自美剧《黑客军团 第3季》。
早期的互联网非常的单调,一般只有静态页面,现在,随着技术的发展,web上大多数站点实际上是web应用程序,在服务器和浏览器之间进行双向的信息传递。他们支持注册登录,金融交易,搜索及用户创作的内容。用户只需要拥有一个浏览器,就能实现各种功能。
Web是指一个网站的前端页面到后端服务,比如我们常见的 Javascript、PHP、Python、Mysql、jQuery、Docker 等,包括开发、运维这些服务。
所以在我看来 Web 安全也就是从安全的角度探索 Web 的一种方式。
拓展阅读:
《彻底理解cookie、session、token》
https://mp.weixin.qq.com/s/ow6CryxVrkeU79GD857d1w
作者:二向箔安全 链接:https://www.zhihu.com/question/21606800/answer/219614097
当然除了这些数据也有可能流向不些不可见的第三方服务商。
拓展阅读:
数据流中,有个关键的是HTTP协议,从上到下→从下到上的头尾两端(即请求响应),搞通!推荐阅读《HTTP权威指南》,零基础入门的同学,推荐《图解HTTP》,从基础知识到最新动向,172张图解轻松入门。
本文主要讨论以下几种攻击方式: SQL 注入、XSS攻击、CSRF攻击、URL跳转漏洞。
SQL注入
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
原因:
当使用外部不可信任的数据作为参数进行数据库的增、删、改、查时,如果未对外部数据进行过滤,就会产生 SQL 注入漏洞。(如下图所示)
①通过检查Web页而上存在的SQL注入漏洞,构建特殊的SQL注入点;
②其次通过这些特殊的注入点利用Web页而动态传递参数的功能,将SQL的语法组合动态传递给数据库;
③然后根据数据库的不同类型,对数据库采取不同的处理;
④最后执行SQL语句,从而达到攻击者想要的目的。
解决方案:
具体的解决方案很多,但大部分都是基于一点:不信任任何外部输入。
所以,对任何外部输入都进行过滤,然后再进行数据库的增、删、改、查。
此外,适当的权限控制、不曝露必要的安全信息和日志也有助于预防 SQL 注入漏洞。
参考《Web安全漏洞之SQL注入 - 防御方法》
(https://juejin.im/post/5bd5b820e51d456f72531fa8#heading-2)了解具体的解决方案。
拓展阅读:
《Web 安全漏洞之 SQL 注入》
https://juejin.im/post/5bd5b820e51d456f72531fa8
《SQL 注入详解》
https://segmentfault.com/a/1190000007520556
XSS攻击
XSS则是攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
原因:
当攻击者通过某种方式向浏览器页面注入了恶意代码,并且浏览器执行了这些代码。数据流程如下:
恶意用户的Html输入——>Web程序——>进入数据库——>Web程序———>用户浏览器
解决方案:
一个基本的思路是渲染前端页面(不管是客户端渲染还是服务器端渲染)或者动态插入 HTML 片段时,任何数据都不可信任,都要先做 HTML 过滤,然后再渲染。
参考《前端安全系列(一):如何防止XSS攻击? - 攻击的预防》(https://segmentfault.com/a/1190000016551188#articleHeader7)了解具体的解决方案。
拓展阅读:
《前端安全系列(一):如何防止XSS攻击?》
https://segmentfault.com/a/1190000016551188
《前端防御 XSS》
https://juejin.im/entry/56da82a87664bf0052ebad41
《浅说 XSS 和 CSRF》
https://juejin.im/entry/5b4b56fd5188251b1a7b2ac1
CSRF攻击
CSRF 攻击全称跨站请求伪造(Cross-site Request Forgery),攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
原因:
典型的CSRF攻击流程:
注:上面的过程摘自《前端安全系列之二:如何防止CSRF攻击?》(https://segmentfault.com/a/1190000016659945)。
解决方案:
防止 CSRF 攻击需要在服务器端入手,基本的思路是能正确识别是否是用户发起的请求。
参考《前端安全系列之二:如何防止CSRF攻击? - 防护策略》(https://segmentfault.com/a/1190000016659945#articleHeader4)了解具体的解决方案。
拓展阅读:
《前端安全系列之二:如何防止CSRF攻击?》
https://segmentfault.com/a/1190000016659945
《Web安全漏洞之CSRF》
https://juejin.im/post/5ba1a800e51d450e8657f5dd
《浅说 XSS 和 CSRF》
https://juejin.im/entry/5b4b56fd5188251b1a7b2ac1
URL跳转漏洞
URL 跳转漏洞是指后台服务器在告知浏览器跳转时,未对客户端传入的重定向地址进行合法性校验,导致用户浏览器跳转到钓鱼页面的一种漏洞。
URL跳转一般有以下几种实现方式:Header头跳转、Javascript跳转、META标签跳转。
原因:
URL跳转漏洞的出现场景还是很杂的,出现漏洞的原因大概有以下5个:
解决方案:
预防这种攻击的方式,就是对客户端传递过来的跳转 URL 进行校验。
1.referer的限制
如果确定传递URL参数进入的来源,我们可以通过该方式实现安全限制,保证该URL的有效性,避免恶意用户自己生成跳转链接。
2.加入有效性验证Token
保证所有生成的链接都是来自于可信域,通过在生成的链接里加入用户不可控的token对生成的链接进行校验,可以避免用户生成自己的恶意链接从而被利用。
拓展阅读:
《URLHacking 》
http://www.vuln.cn/6533
《URL跳转漏洞》
https://blog.csdn.net/tizhan6691/article/details/79376061