天天看点

常见漏洞解决方案防止SQL注入防范上传漏洞防范XSS跨站脚本防范CSRF

漏洞解决方案

  • 防止SQL注入
    • 数据类型判断
    • 特殊字符转义
    • 使用预编译语句
    • 框架技术
  • 防范上传漏洞
    • 客户端检测
    • 服务端检测
  • 防范XSS跨站脚本
    • 过滤敏感字符
    • 防范命令执行漏洞
    • 防范文件包含漏洞
  • 防范CSRF
    • 二次确认
    • Token确认
    • 二级目录防范逻辑漏洞

防止SQL注入

数据类型判断

强类型语言(Java c#)可以完全忽略数字型注入,弱类型语言会根据参数自动推到数据类型,只需要在程序中严格判断数据类型即可,使用is_numeric()、ctype_digit()函数判断数据类型

特殊字符转义

OWASP ESAPI提供了专门对数据库字符编码的接口,根据不同的数据库实现不同的编码器,支持Mysql,Oracle,DB2

Oracle为例

Oracle orcl = new OracleCodec();

String sql = “SELECT USERID,USERNAME,PASSWORD FORM USER WHERE USERI= ”+ESAPI.encoder().encodeforSQL(orcl,userId);

State stmt = conn.createStatement(sql);

使用预编译语句

预编译语句在创建的时候已经将指定的SQL 语句发给了DBMS,完成解析、检查、编译等工作。

java中提供了三个接口与数据库交互,statement(执行静态SQL语句,并返回它所生成结果的对象)、PreparedStatement(statement的子类,表示预编译SQL语句的对象)、callablestatement(PreparedStatement的子类,执行SQL存储过程)

在使用Preparedstatement接口时,不能使用动态拼接SQL语句,必须使用它提供的setter方法。

框架技术

有一类框架专门和数据库打交道,被称为持久性框架,代表有:Hibernate、Mybatis、JORM,同样框架也要避免使用字符串动态拼接的方式,使用参数名称或者位置绑定的方式。

总结: SQL注入工具已经相当完备,一般工具为主,手工为辅。SQL注入的危害很大,可以完全杜绝,开发团队必须要有自己一套安全规范模板。

防范上传漏洞

客户端检测

客户端使用JavaScript检测,在文件未上传时,就对文件进行验证

客户端验证的初衷是防止普通客户上传错误,很容易绕过,FireBug可以绕过,Burp Suite中间人攻击可以绕过

服务端检测

主要包括:白名单和黑名单扩展名过滤、文件类型检测(MIME类型用来设定某种扩展文件的打开方式,当具有该扩展名的文件被访问时,浏览器会自动使用指定的应用程序打开,如GIFTU图片MIME为image/gif,css文件MIME类型text/css)、文件重命名等,但是开发人员要考虑解析问题,上传漏洞配合解析漏洞可以绕过大多数上传验证。

总结:上传漏洞成因一是目录过滤不严,攻击者可能建立畸形目录,二是文件未重命名,攻击者可能利用Web容器解析漏洞。

防御步骤(1)接收文件及其文件路径。

(2)获取扩展名与白名单对比,如果没有命令,程序退出。

(3)对文件重命名

以上步骤可以基本防御上传漏洞,Web容器为Apache时,不识别RAR格式,攻击者就可以上传病毒文件,配合Apache解析漏洞入侵。不仅需要程序编写方面要注意,在服务器配置,Web容器配置也要注意。

防范XSS跨站脚本

过滤敏感字符

在PHP中提供了htmlspecialchars()、htmlentities()函数把预定义的字符转换成HTML实体

在Java中也有一些三方组件支持过滤XSS漏洞,OWASPEsapi、JSOUP、xssprotect

虽然HttpOnly对防御XSS漏洞不起作用,主要是解决XSS漏洞后续的Cookie劫持攻击

防范命令执行漏洞

1、尽量不要使用系统执行命令

2 、在进入执行命令函数或方法前,变量做好过滤,敏感字符转义

3、使用动态函数之前,确保使用的函数是指定的函数之一

4 、PHP不能完全掌控的函数最好不要使用

防范文件包含漏洞

1严格判断包含中的参数是否外界可控

2路径限制:限制被包含的文件只能在某一文件夹内,一定要禁止目录跳转字符,如“…/”

3包含文件验证验证被包含的文件是否是白名单一员

4尽量不要使用动态包含,可以在需要包含的页面固定写好

防范CSRF

CSRE可以理解为:服务器有没有执行POC的请求

预防

二次确认

Token确认

攻击成功的两个因素:

1 攻击者得知URL的所有参数项

2 、诱导用户访问构造好的POC

二级目录防范逻辑漏洞

成因不可预知性太强,需要丰富的经验,也需要足够强的代码能力,常规的挖掘逻辑漏洞:

1 、 发现网站提供的功能模块,比如:修改密码、找回密码、修改个人资料等

针对具体的功能确定业务流程,详细划分具体步骤,

拦截HTTP/HTTPS请求,分析其参数项的含义

修改参数值,尝试触发逻辑漏洞

2、常见的逻辑漏洞

绕过授权验证(水平越权,垂直越权)、密码找回逻辑漏洞、支付逻辑漏洞(数量为负,0元购买)、指定账户恶意攻击