SQL 注入就是经过给 web 应用接口传入一些特殊字符,达到欺骗服务器执行恶意的 SQL 命令。php
SQL 注入漏洞属于后端的范畴,但前端也可作体验上的优化。html
当使用外部不可信任的数据做为参数进行数据库的增、删、改、查时,若是未对外部数据进行过滤,就会产生 SQL 注入漏洞。前端
好比:git
name = "外部输入名称"; sql = "select * from users where name=" + name;
上面的 SQL 语句目的是经过用户输入的用户名查找用户信息,由于因为 SQL 语句是直接拼接的,也没有进行过滤,因此,当用户输入 '' or '1'='1'
时,这个语句的功能就是搜索 users
全表的记录。github
select * from users where name='' or '1'='1';
具体的解决方案不少,但大部分都是基于一点:不信任任何外部输入。web
因此,对任何外部输入都进行过滤,而后再进行数据库的增、删、改、查。sql
此外,适当的权限控制、不曝露必要的安全信息和日志也有助于预防 SQL 注入漏洞。shell
参考 Web 安全漏洞之 SQL 注入 - 防护方法 了解具体的解决方案。数据库
XSS 攻击全称跨站脚本攻击(Cross-Site Scripting),简单的说就是攻击者经过在目标网站上注入恶意脚本并运行,获取用户的敏感信息如 Cookie、SessionID 等,影响网站与用户数据安全。json
XSS 攻击更偏向前端的范畴,但后端在保存数据的时候也须要对数据进行安全过滤。
当攻击者经过某种方式向浏览器页面注入了恶意代码,而且浏览器执行了这些代码。
好比:
在一个文章应用中(如微信文章),攻击者在文章编辑后台经过注入 script
标签及 js
代码,后端未加过滤就保存到数据库,前端渲染文章详情的时候也未加过滤,这就会让这段 js
代码执行,引发 XSS 攻击。
一个基本的思路是渲染前端页面(不论是客户端渲染仍是服务器端渲染)或者动态插入 HTML 片断时,任何数据都不可信任,都要先作 HTML 过滤,而后再渲染。
参考 前端安全系列(一):如何防止XSS攻击? - 攻击的预防 了解具体的解决方案。
CSRF 攻击全称跨站请求伪造(Cross-site Request Forgery),简单的说就是攻击者盗用了你的身份,以你的名义发送恶意请求。
一个典型的 CSRF 攻击有着以下的流程:
a.com
,并保留了登陆凭证(Cookie)b.com
b.com
向 a.com
发送了一个请求:a.com/act=xx
(浏览器会默认携带 a.com
的 Cookie)a.com
接收到请求后,对请求进行验证,并确认是受害者的凭证,误觉得是受害者本身发送的请求a.com
以受害者的名义执行了 act=xx
a.com
执行了本身定义的操做注:上面的过程摘自 前端安全系列之二:如何防止CSRF攻击?
防止 CSRF 攻击须要在服务器端入手,基本的思路是能正确识别是不是用户发起的请求。
参考 前端安全系列之二:如何防止CSRF攻击? - 防御策略 了解具体的解决方案。
DoS 攻击全称拒绝服务(Denial of Service),简单的说就是让一个公开网站没法访问,而 DDoS 攻击(分布式拒绝服务 Distributed Denial of Service)是 DoS 的升级版。
这个就彻底属于后端的范畴了。
攻击者不断地提出服务请求,让合法用户的请求没法及时处理,这就是 DoS 攻击。
攻击者使用多台计算机或者计算机集群进行 DoS 攻击,就是 DDoS 攻击。
防止 DDoS 攻击的基本思路是限流,限制单个用户的流量(包括 IP 等)。
参考 DDoS的攻击及防护 - 防护 了解具体的解决方案。
XXE 漏洞全称 XML 外部实体漏洞(XML External Entity),当应用程序解析 XML 输入时,若是没有禁止外部实体的加载,致使可加载恶意外部文件和代码,就会形成任意文件读取、命令执行、内网端口扫描、攻击内网网站等攻击。
这个只在可以接收 XML 格式参数的接口才会出现。
参考 xxe漏洞的学习与利用总结 了解具体的解决方案。
JSON 劫持(JSON Hijacking)是用于获取敏感数据的一种攻击方式,属于 CSRF 攻击的范畴。
一些 Web 应用会把一些敏感数据以 json 的形式返回到前端,若是仅仅经过 Cookie 来判断请求是否合法,那么就能够利用相似 CSRF 的手段,向目标服务器发送请求,以得到敏感数据。
好比下面的连接在已登陆的状况下会返回 json 格式的用户信息:
http://www.test.com/userinfo
攻击者能够在本身的虚假页面中,加入以下标签:
<script src="http://www.test.com/userinfo"></script>
若是当前浏览器已经登陆了 www.test.com
,而且 Cookie 未过时,而后访问了攻击者的虚假页面,那么该页面就能够拿到 json 形式的用户敏感信息,由于 script
标签会自动解析 json 数据,生成对应的 js 对象。而后再经过:
Object.prototype.__defineSetter__
这个函数来触发本身的恶意代码。
可是这个函数在当前的新版本 Chrome 和 Firefox 中都已经失效了。
注:上面的过程摘自 JSON和JSONP劫持以及解决方法
X-Requested-With
标识这个通常针对密码而言,弱密码(Weak Password)很容易被别人(对你很了解的人等)猜到或被破解工具暴力破解。
HTTP/1.1(RFC2616)规范定义了 HTTP TRACE 方法,主要是用于客户端经过向 Web 服务器提交 TRACE 请求来进行测试或得到诊断信息。
当 Web 服务器启用 TRACE 时,提交的请求头会在服务器响应的内容(Body)中完整的返回,其中 HTTP 头极可能包括 Session Token、Cookies 或其它认证信息。攻击者能够利用此漏洞来欺骗合法用户并获得他们的私人信息。
禁用 HTTP TRACE 方法。
因为 Web 服务器或应用程序没有正确处理一些特殊请求,泄露 Web 服务器的一些敏感信息,如用户名、密码、源代码、服务器信息、配置信息等。
因此通常需注意:
攻击者向 Web 服务器发送请求,经过在 URL 中或在有特殊意义的目录中附加 ../
、或者附加 ../
的一些变形(如 ..\
或 ..//
甚至其编码),致使攻击者可以访问未受权的目录,以及在 Web 服务器的根目录之外执行命令。
命令执行漏洞是经过 URL 发起请求,在 Web 服务器端执行未受权的命令,获取系统信息、篡改系统配置、控制整个系统、使系统瘫痪等。
若是对文件上传路径变量过滤不严,而且对用户上传的文件后缀以及文件类型限制不严,攻击者可经过 Web 访问的目录上传任意文件,包括网站后门文件(webshell
),进而远程控制网站服务器。
因此通常需注意:
webshell
攻击通常业务漏洞是跟具体的应用程序相关,好比参数篡改(连续编号 ID / 订单、1 元支付)、重放攻击(假装支付)、权限控制(越权操做)等。
另外能够参考:6种常见web漏洞坑
更多博客,查看 https://github.com/senntyou/blogs
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)