摘要: 安全第一!javascript
Fundebug遵循创意共享3.0许可证转载,版权归原做者全部。php
SQL 注入就是经过给 web 应用接口传入一些特殊字符,达到欺骗服务器执行恶意的 SQL 命令。html
SQL 注入漏洞属于后端的范畴,但前端也可作体验上的优化。前端
缘由java
当使用外部不可信任的数据做为参数进行数据库的增、删、改、查时,若是未对外部数据进行过滤,就会产生 SQL 注入漏洞。git
好比:github
name = "外部输入名称";
sql = "select * from users where name=" + name;
复制代码
上面的 SQL 语句目的是经过用户输入的用户名查找用户信息,由于因为 SQL 语句是直接拼接的,也没有进行过滤,因此,当用户输入 '' or '1'='1'
时,这个语句的功能就是搜索 users
全表的记录。web
select * from users where name='' or '1'='1';
复制代码
解决方案sql
具体的解决方案不少,但大部分都是基于一点:不信任任何外部输入。shell
因此,对任何外部输入都进行过滤,而后再进行数据库的增、删、改、查。
此外,适当的权限控制、不曝露必要的安全信息和日志也有助于预防 SQL 注入漏洞。
参考 Web 安全漏洞之 SQL 注入 - 防护方法 了解具体的解决方案。
推荐参考
XSS 攻击全称跨站脚本攻击(Cross-Site Scripting),简单的说就是攻击者经过在目标网站上注入恶意脚本并运行,获取用户的敏感信息如 Cookie、SessionID 等,影响网站与用户数据安全。
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漏洞坑
更多博客,查看 github.com/senntyou/bl…
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)