看到上图的漏洞是否是特别熟悉,若是不进行及时防护,就会产生蝴蝶效应。php
往下看,可能会找到你要的答案。html
SQL注入攻击是经过WEB表单提交,在URL参数提交或Cookie参数提交,将怀有恶意的“字符串”,提交给后台数据库,欺骗服务器执行恶意的SQL语句。mysql
//以用户登陆为例,当验证用户名和密码是否正确时 $sql = "SELECT * FROM user WHERE username = '".$_GET['username']."' AND password = '".$_GET['password']."'";
用户恶意输入:web
$_GET['username'] = "' or 1=1 -- '"; $_GET['password'] = "123456";
注入后的Sql语句:redis
$sql = "SELECT * FROM user WHERE username = '' or 1=1 -- ''AND password = '123456'";
执行注入后的Sql语句,能够返回 user 表的所有数据。sql
平时咱们能够进行自测,好比使用单引号、双引号,若是是数字进行+1或-1。shell
SQL注入的危害很大,利用SQL注入能够进行,拖库、删库、删表、UDF提权、读取文件、... 数据库
推荐一个开源的自动化的SQL注入工具。segmentfault
SQLmap:http://sqlmap.org/浏览器
尝试着利用工具,注入本身的项目,发现问题,而后解决问题。
SQL注入的危害,远比咱们想象的要大!
推荐解决方案是使用 PDO 或 MySQLi 的数据库扩展。
PHP官方文档中介绍,MySQL扩展自PHP 5.5.0起已废弃,并在自PHP7.0.0开始被移除。
若是已经在用MySQL扩展了,能够对传入的每一个参数作验证,并使用框架的ORM进行查询。
另外:addslashes 和 mysql_real_escape_string 这种转义是不安全的!
XSS攻击是一种常常出如今WEB应用中的计算机安全漏洞,经过WEB表单提交或在URL参数提交将代码植入在用户的使用页面上。
存储型
注入的恶意代码存储在服务器上(经常使用于留言板、论坛帖子、CRM),受害者请求服务器获取信息的时候,这些恶意代码就被浏览器成功执行。
反射型
注入的恶意代码没有存储在服务器上,经过引诱用户点击一个连接到目标网站进行实施攻击。
DOM型
注入的恶意代码并未显式的包含在web服务器的响应页面中,但会被页面中的js脚本以变量的形式来访问到的方式来进行实施攻击。
存储型:论坛帖子界面input输入框中,输入 /><script>alert("xss")</script>
进行提交。
反射型:在浏览器输入框中,输入 /xxx.php?name=<script>alert(/xss/)</script>
//DOM型,代码举例 <script> var temp = document.URL; var temp_new = temp+'test' document.write(decodeURI(temp_new)); </script>
XSS的危害有不少,包括盗号,挂马,控制受害者机器想其余网站发起攻击 ...
自测的方法,看见输入框就输入:/><script>alert("xss")</script>
进行提交。
推荐一个专门针对浏览器攻击的框架。
BeEF :https://beefproject.com/
简单的防护能够对style、script、image、src、a等等不安全的因素进行过滤或转义。
能够本身封装一个方法,也可使用框架的自带方法,好比 xss_clean 。
能够利用一些模板引擎避免XSS攻击,好比Laravel框架使用的Blade,还有twig,Smarty等。
能够利用HTTP-only,将cookie设置成HTTP-only防止XSS攻击。
//设置Cookie setcookie($name, $value, $expire, $path, $domain, $secure, $httponly); //而后服务端经过使用 $_COOKIE 进行验证。
可使用Content Security Policy,它的实质就是白名单制度。
入门教程请参考:http://www.ruanyifeng.com/blo...
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是攻击者伪造服务器端发起的请求,虽然攻击者没法从外网访问内网的系统,可是它经过注入恶意代码从服务端发起,经过服务端就再访问内网的系统,而后获取不应获取的数据。
漏洞主要产生在包含这些方法的代码中,好比 curl、file_get_contents、fsockopen。
//代码片断 <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $_GET['url']); curl_setopt($ch, CURLOPT_HEADER, false); curl_exec($ch); curl_close($ch);
请求地址:http://www.xxx.com/demo.php?u...
将url参数修改为,file:///etc/passwd,能够获取敏感文件的信息。
将url参数修改为,dict://127.0.0.1:3306/info,能够获取目标主机3306端口运行的应用。
除了 file协议,dict协议,还能够利用gopher协议 和 http/https 协议进行攻击。
能够攻击redis,memcache,内网应用,还能够查看一下敏感文件的信息 等等。
对 curl、file_get_contents、fsockopen 这些方法中的参数进行严格验证!
限制协议只能为HTTP或HTTPS,禁止进行跳转。
若是有白名单,解析参数中的URL,判断是否在白名单内。
若是没有白名单,解析参数中的URL,判断是否为内网IP。
CSRF(Cross-site request forgery:跨站请求伪造)是攻击者经过假装成受信任的用户,盗用受信任用户的身份,用受信任用户的身份发送恶意请求。
从上图看出,完成一次CSRF攻击,须要完成两个步骤:
1.登陆受信任网站A,本地生成网站A的Cookie。
2.未退出网站A的状况下,访问危险网站B。
具体危害要看受信任网站是作什么的,若是是社交网站能够操控发广告,若是是电商网站能够操控购物,若是是银行网站甚至还能够操控转帐,......
这样危害会形成我的信息的泄露和财产的损失。
Cookie Hashing,表单提交或Ajax提交,必须使用csrf token。
对于不肯定是否有csrf风险的请求,可使用验证码(尽管体验会变差)。
对于一些重要的操做(修改密码、修改邮箱),必须使用二次验证。
文件上传漏洞是攻击者上传了一个可执行的文件到服务器上执行。
可执行文件包括有病毒、木马、恶意脚本等。
文件上传漏洞与SQL注入或XSS相比,其风险更大,若是存在上传漏洞攻击者甚至能够直接上传一个webshell脚本到服务器上。
信息泄露主要指用户的手机号、邮箱、密码、身份证、地址等敏感数据泄露,还有服务器上的文件和环境变量等敏感数据泄露,还包括将直接将企业源码上传到开发平台。
好比开发接口时,接口返回明文的手机号。
好比调试代码时,代码中提交了一些调试信息,未进行删除。
......
“超出了你本身所拥有的权限,干了你原本不可能干的事情。”
水平越权:用户A未受权能够访问用户B的数据。
垂直越权:未登陆用户能够访问须要受权的应用。
举例,原本用户A只能查看本身的订单数据,可是他经过修改URL参数就能查看到用户B的订单数据。
未登陆的用户,能够访问到后台模块并进行操做。
对于全部涉及到用户数据的操做,必须严格判断当前用户的身份。
对于全部须要权限控制的位置,必须严格检验用户权限级别。
举例,登陆时进行验证,当用户不存在时,返回“用户不存在”,当用户被禁用时,返回“用户已被禁用”。
避免攻击者进行恶意尝试,不该该返回过多的信息,能够统一返回“用户名或密码错误”。
举例,注册或登陆时用户输入手机号码就可直接触发短信接口,这块最容易被攻击者进行短信轰炸。
应该进行增长接口调用限制:
文章主要讲解了 SQL注入攻击、XSS攻击、SSRF攻击、CSRF攻击、文件上传漏洞、信息泄露、越权、设计缺陷等八大方面,经过此次的梳理,也使我本身对PHP WEB安全防护有了一个全面了解。
同时还要时刻保持警戒,全部用户输入的数据都是不值得信任的,接收到的数据必须通过校验和过滤。
也不要轻易相信从网络上发现的代码,在使用第三方类库或代码时抱有怀疑的态度,要多进行调试和验证,看起来没问题的代码可能隐藏了不少的安全隐患。
最后,推荐一款开源的漏洞演示平台,包含了100多个漏洞。
这个是安装在本地的,你们尝试注入恶意代码,同时也警醒本身不要犯这样的错误。
bWAPP:http://www.itsecgames.com/
本文欢迎转发,转发请注明做者和出处,谢谢!