SQL注入攻击

定义

SQL注入攻击是通过WEB表单提交、URL参数提交或Cookie参数提交,将怀有恶意的“字符串”,提交到后台数据库,欺骗服务器执行恶意的SQL语句。

案例

	
  1. //以用户登录为例,当验证用户名和密码是否正确时scriptscriptscriptscript> 进行提交。

    在这里,推荐一个专门针对浏览器攻击的框架。

    BeEF :https://beefproject.com/

    防御

    简单的防御可以对style、script、image、src、a等等不安全的因素进行过滤或转义。

    可以自己封装一个方法,也可以使用框架的自带方法,比如 xss_clean 。

    可以利用一些模板引擎避免XSS攻击,比如Laravel框架使用的Blade,还有twig,Smarty等。

    可以利用HTTP-only,将cookie设置成HTTP-only防止XSS攻击。

    	
    1. //设置Cookie

    2. setcookie($name, $value, $expire, $path, $domain, $secure, $httponly);


    3. //然后服务端通过使用 $_COOKIE 进行验证。

    可以使用Content Security Policy,它的实质就是白名单制度。

    入门教程请参考:http://www.ruanyifeng.com/blog/2016/09/csp.html

    SSRF攻击

    定义

    SSRF(Server-Side Request Forgery:服务器端请求伪造) 是攻击者伪造服务器端发起的请求,虽然攻击者无法从外网访问内网的系统,但是它通过注入恶意代码从服务端发起,通过服务端就再访问内网的系统,然后获取不该获取的数据。

    案例

    漏洞主要产生在包含这些方法的代码中,比如 curl、file_get_contents、fsockopen。

    	
    1. //代码片段

    2. php

    3. $ch = curl_init();

    4. curl_setopt($ch, CURLOPT_URL, $_GET['url']);

    5. curl_setopt($ch, CURLOPT_HEADER, false);

    6. curl_exec($ch);

    7. curl_close($ch);

    请求地址:http://www.xxx.com/demo.php?url=xxx

    将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攻击

    定义

    CSRF(Cross-site request forgery:跨站请求伪造)是攻击者通过伪装成受信任的用户,盗用受信任用户的身份,用受信任用户的身份发送恶意请求。

    从上图看出,完成一次CSRF攻击,需要完成两个步骤:

    1.登录受信任网站A,本地生成网站A的Cookie。

    2.未退出网站A的情况下,访问危险网站B。

    危害

    具体危害要看受信任网站是做什么的,如果是社交网站可以操控发广告,如果是电商网站可以操控购物,如果是银行网站甚至还可以操控转账,......

    这样危害会造成个人信息的泄露和财产的损失。

    防御

    Cookie Hashing,表单提交或Ajax提交,必须使用csrf token。

    对于不确定是否有csrf风险的请求,可以使用验证码(尽管体验会变差)。

    对于一些重要的操作(修改密码、修改邮箱),必须使用二次验证。

    文件上传漏洞

    定义

    文件上传漏洞是攻击者上传了一个可执行的文件到服务器上执行。

    可执行文件包括有病毒、木马、恶意脚本等。

    危害

    文件上传漏洞与SQL注入或XSS相比,其风险更大,如果存在上传漏洞攻击者甚至可以直接上传一个webshell脚本到服务器上。

    防御

    • 文件扩展名检测

    • 文件 MIME 验证

    • 文件重命名

    • 文件目录设置不可执行权限

    • 设置单独域名的文件服务器

    信息泄露

    定义

    信息泄露主要指用户的手机号、邮箱、密码、身份证、地址等敏感数据泄露,还有服务器上的文件和环境变量等敏感数据泄露,还包括将直接将企业源码上传到开源平台。

    案例

    比如开发接口时,接口返回明文的手机号。

    比如调试代码时,代码中提交了一些调试信息,未进行删除。

    ......

    防御

    • 敏感数据脱敏(比如手机号、身份证、邮箱、地址)。

    • 服务器上不允许提交包含打印 phpinfo 、$_SERVER 和 调试信息等代码。

    • 定期从开源平台扫描关于企业相关的源码项目。

    越权

    定义

    “超出了你自己所拥有的权限,干了你本来不可能干的事情。”

    水平越权:用户A未授权可以访问用户B的数据。

    垂直越权:未登录用户可以访问需要授权的应用。

    举例,本来用户A只能查看自己的订单数据,但是他通过修改URL参数就能查看到用户B的订单数据。

    未登录的用户,可以访问到后台模块并进行操作。

    防御

    对于所有涉及到用户数据的操作,必须严格判断当前用户的身份。

    对于所有需要权限控制的位置,必须严格检验用户权限级别。

    设计缺陷

    返回信息过多

    举例,登录时进行验证,当用户不存在时,返回“用户不存在”,当用户被禁用时,返回“用户已被禁用”。

    避免攻击者进行恶意尝试,不应该返回过多的信息,可以统一返回“用户名或密码错误”。

    短信接口被恶意攻击

    举例,注册或登录时用户输入手机号码就可直接触发短信接口,这块最容易被攻击者进行短信轰炸。

    应该进行增加接口调用限制:

    • 设置同一手机号短信发送间隔

    • 设置每个IP地址每日最大发送量

    • 设置每个手机号每日最大发送量

    • 升级验证码,采用滑动拼图、文字点选、图表点选...

    • 升级短信接口的验证方法

01-16 15:45