博客主机
A-A+

常见web安全漏洞修复方案

2019年04月17日 文章转载 暂无评论 阅读 490 views 次
博客主机

第一章 SQL注入漏洞

第一节 漏洞介绍

概述:SQL注入攻击包括通过输入数据从客户端插入或“注入”SQL查询到应用程序。一个成功的SQL注入攻击可以从 数据库中获取敏感数据、修改数据库数据(插入/更新/删除)、执行数据库管理操作 (如关闭数据库管理系统)、恢 复存在于数据库文件系统中的指定文件内容,在某些情况下能对操作系统发布命令。SQL注入攻击是一种注入攻击。 它将SQL命令注入到数据层输入,从而影响执行预定义的SQL命令。由于用户的输入,也是SQL语句的一部分,所以 攻击者可以利用这部分可以控制的内容,注入自己定义的语句,改变SQL语句执行逻辑,让数据库执行任意自己需要 的指令。通过控制部分SQL语句,攻击者可以查询数据库中任何自己需要的数据,利用数据库的一些特性,可以直接 获取数据库服务器的系统权限。

潜在风险:高

第二节 JAVA漏洞代码示例

//拼接SQL语句,直接插入数据库查询

第三节 修复建议

使用参数化查询接口或在代码级对带入SQL语句中的外部参数进行转义或过滤:

1. 对于整数,判断变量是否符合[0-9]的值;其他限定值,也可以进行合法性校验;

2. 对于字符串,对SQL语句特殊字符进行转义(单引号转成两个单引号,双引号转成两个双引号)。

第四节 JAVA修复建议

1. 参数化查询(最佳修复方法)

2. 过滤特殊字符,过滤的访问为所有用户输入的数据

GET、POST的参数

表单的参数

http头的参数

UA、X-FORWARD-FOR、Content-type等可以修改的字段

JSON类型的参数

在web.xml 配置拦截器

过滤器SqlFilter.java

 

3. 若使用框架,对应的框架可能存在相应的防注入方法

第二章 XSS漏洞

第一节 漏洞介绍

描述:当应用程序发送给浏览器的页面中包含用户提供的数据,而这些数据没有经过适当的验证或转义 (escape),就会导致跨站脚本漏洞。攻击者通常会利用XSS漏洞来安装键盘记录器、窃取受害者的cookie、窃取剪 贴板内容、改变网页内容(例如,下载链接)等。有三种已知的跨站漏洞类型:1)存储式;2)反射式;3)基于 DOM的XSS。

(一) 反射型跨站脚本:攻击者会通过社会工程学手段,发送一个URL连接给用户打开,在用户打开页面的同时,浏览 器会执行页面中嵌入的恶意脚本;

(二) 存储型跨站脚本:攻击者利用web应用程序提供的输入或修改数据功能,将数据存储到服务器或用户cookie中, 当其他用户浏览展示该数据的页面时,浏览器会执行页面中嵌入的恶意脚本。所有浏览者都会受到攻击;

(三) DOM跨站攻击:由于html页面中,定义了一段JS,根据用户的输入,显示一段html代码,攻击者可以在输入 时,插入一段恶意脚本,最终展示时,会执行恶意脚本;

(四)DOM跨站和以上两个跨站攻击的差别是,DOM跨站是纯页面脚本的输出,只有规范使用JAVASCRIPT,才可以防 御。

恶意攻击者可以利用跨站脚本攻击做到:

(一) 盗取用户cookie,伪造用户身份登录;

(二) 控制用户浏览器;

(三) 结合浏览器及其插件漏洞,下载病毒木马到浏览者的计算机上执行;

(四) 衍生URL跳转漏洞; // TODO Auto-generated method stub config = fConfig; } } //Hibernate String queryStr = "from user where username=:username "+"password=:password"; List result = session.createQuery(queryStr).setString("username",username).setString("password", password).list(); //Mybatis 参数拼接使用#{},而不是使用${} SELECT id,title,author,content FROM blog WHERE id=#{id}

(五) 让官方网站出现钓鱼页面;

(六) 蠕虫攻击。

第二节 JAVA漏洞代码示例

变量name被直接输出到了页面中,没有做任何安全过滤,一旦让用户可以输入数据,都可能导致用户浏览器把“用户 可控数据”当成JS/VBS脚本执行,或页面元素被“用户可控数据”插入的页面HTML代码控制,从而造成攻击。

第三节 修复建议

1. 对参数做html转义过滤(要过滤的字符包括:单引号、双引号、大于号、小于号,&符号),防止脚本执行。 在变量输出时进行HTML ENCODE 处理。

2. JAVA应用可以使用org.apache.commons.lang3.StringEscapeUtils.escapeHtml4对用户参数进行编码

3. 启用COOKIE的httponly属性。

第四节 JAVA修复示例

1. 输出转义(最佳修复方法)

2. 输入过滤,可以参考SQL注入利用过滤器的方式,但该方法不推荐。

3. 富文本框的XSS修复方法,利用Jsoup的包,对文本输入的标签做限制

第三章 CSRF漏洞

第一节 漏洞介绍

描述:用户以当前身份浏览到flash或者恶意网站时,JS/flash可以迫使用户浏览器向任意CGI发起请求,此请求包含 用户身份标识,CGI如无限制则会以用户身份进行操作。如:以用户身份发起的转账请求等。CSRF攻击可以从站外和 站内发起。从站内发起CSRF攻击,需要利用网站本身的业务,比如“自定义头像”功能,恶意用户指定自己的头像URL 是一个修改用户信息的链接,当其他已登录用户浏览恶意用户头像时,会自动向这个链接发送修改信息请求。从站外 发送请求,则需要恶意用户在自己的服务器上,放一个自动提交修改个人信息的htm页面,并把页面地址发给受害者 用户,受害者用户打开时,会发起一个请求。如果恶意用户能够知道网站管理后台某项功能的URL,就可以直接攻击 管理员,强迫管理员执行恶意用户定义的操作。

潜在危险:中

第二节 JAVA漏洞代码示例

代码中接收用户提交的参数“passwordOld、passwordNew”,之后修改了该用户的密码,一旦接收到一个用户发来 的请求,就执行此操作。

提交表单代码:

当用户点提交时,就会触发修改操作。

第三节 修复建议

第一种修复方法:(推荐) 添加随机TOKEN,实现方式如下:

1. 在用户登陆时,设置一个CSRF的随机TOKEN,同时种植在用户的cookie (session)中,当用户浏览器关闭、或 用户再次登录、或退出时,清除token;

2. 在表单中,生成一个隐藏域,它的值就是COOKIE (session)中随机TOKEN;

3. 表单被提交后,就可以在接收用户请求的web应用中,判断表单中的TOKEN值是否和用户COOKIE (session)中 的TOKEN值一致,如果不一致或没有这个值,就判断为CSRF攻击,同时记录攻击日志。由于攻击者无法预测每 一个用户登录时生成的那个随机TOKEN值,所以无法伪造这个参数。

第二种修复方法:

验证referer,判断referer是否从表单页面跳转过来。

第四节 JAVA修复示例

1.配置过滤,验证referer

2.配置过滤器,验证TOKEN

 

第四章 文件上传漏洞

第一节 漏洞介绍

描述:Web应用程序在处理用户上传的文件时,没有判断文件的扩展名是否在允许的范围内,就把文件保存在服务器 上,导致恶意用户可以上传任意文件,甚至上传脚本木马到web服务器上,直接控制web服务器。

第二节 JAVA漏洞代码示例

第三节 修复建议

处理用户上传文件,要做以下检查:

1. 检查上传文件扩展名白名单,不属于白名单内,不允许上传;

2. 上传文件的目录必须是http请求无法直接访问到的。如果需要访问的,必须上传到其他(和web服务器不同 的)域名下,并设置该目录为不解析php、jsp等脚本语言的目录;

3. 上传文件要保存的文件名和目录名由系统根据时间随机生成,不允许用户自定义;

4. 图片上传,要通过处理(缩略图、水印等),或通过图片读取函数判断无异常后才能保存到服务器;

5. 上传文件需要做日志记录

第四节 JAVA修复示例

第五章 文件下载漏洞

第一节 漏洞介绍

描述:处理用户请求下载文件时,允许用户提交任意文件路径,并把服务器上对应的文件直接发送给用户,这将造成 任意文件下载威胁。如果让用户提交文件目录地址,就把目录下的文件列表发给用户,会造成目录遍历安全威胁。 恶意用户会变换目录或文件地址,下载服务器上的敏感文件、数据库链接配置文件、网站源代码等。

潜在危险:高

第二节 JAVA漏洞代码示例

第三节 修复建议

对文件操作功能,做到以下几点:

1. 要下载的文件地址保存至数据库中;

2. 文件路径保存至数据库,让用户提交文件对应ID下载文件;

3. 下载文件之前做权限判断;

4. 文件放在web无法直接访问的目录下;

5. 记录文件下载日志;

6. 不允许提供目录遍历服务。

第四节 JAVA修复示例

或者

第六章 命令执行漏洞

第一节 漏洞介绍

描述:web应用代码中,允许接收用户输入一段代码,之后在web应用服务器上执行这段代码,并返回给用户。 由于用户可以自定义输入一段代码,在服务器上执行,所以恶意用户可以写一个远程控制木马,直接获取服务器控制 权限,所有服务器上的资源都会被恶意用户获取和修改,甚至可以直接控制数据库。

潜在危险:高

第二节 JAVA漏洞代码示例

第三节 修复建议

所有需要执行的系统命令,必须是预先定义好的,不允许接收用户传来的参数,加入到系统命令中去。

第四节 JAVA修复示例

第七章 URL跳转漏洞

第一节 漏洞介绍

描述:某些页面由于功能需要需要进行页面跳转,如果没有对跳转的目的页面做检查,恶意攻击者可以发送给用户一 个伪装的链接,安全意识较低的用户很可能会以为该链接展现的内容是公司站点的,从而信任此站点。但是用户打开 后,跳转至钓鱼网站页面,将会导致用户被钓鱼攻击,账号被盗,或账号相关财产被盗。

潜在危险:中

第二节 JAVA漏洞代码示例

第三节 修复建议

为了保证用户所点击的URL,是从web应用程序中生成的URL,所以要做TOKEN验证: 1. 当用户访问需要生成跳转URL的页面时,首先生成随机token,并放入cookie; 2. 在显示连接的页面上生成URL,在URL参数中加入token; 3. 应用程序在跳转前,判断token是否和cookie中的token一致,如果不一致,就判定为URL跳转攻击,并记录日 志(日志内容见“Error Handing and Logging”章节); 4. 如果在javascript中做页面跳转,需要判断域名白名单后,才能跳转; 5. 如果应用只有跳转到公司网站的需求,可以设置白名单,判断目的地址是否在白名单列表中,如果不在列表 中,就判定为URL跳转攻击,并记录日志,不允许配置集团以外网站到白名单列表中。

第四节 JAVA修复示例

第八章 水平权限攻击

第一节 漏洞介绍

描述:Web应用程序接收到用户请求,对用户数据进行CRUD(增加、读取、更新和删除)操作时,没有判断数据的所 属人,或数据所属人userid直接从用户提交的request参数(用户可控数据)中获取,导致恶意攻击者可以通过变换 数据ID或所属人userid,从而越权获取或修改其他人数据。

潜在危险:高

第二节 JAVA漏洞代码示例

第三节 修复建议

(一)检查提交CRUD请求的操作者(通过session信息得到)与目标对象的权限所有者(查数据库)是否一致,如 果不一致则阻断。从session中获取当前登录用户的userid,并且需要在执行的SQL语句中,加入当前用户userid作 为条件语句。

(二)将数据ID改成一个具有一定长度的随机字符串。

第四节 Java修复示例

第九章 垂直权限攻击

第一节 漏洞介绍

描述:垂直权限攻击即低权限用户越权利用更高权限用户的功能实现权限提升攻击,是由于web应用程序没有做权限 控制,或仅仅在菜单上做了权限控制,导致的恶意用户只要猜测其他管理页面的URL,就可以访问或控制其他角色拥 有的数据或页面,达到权限提升目的。这个威胁可能导致普通用户变成管理员权限。

潜在危险:高

第二节 JAVA漏洞代码

一个仅仅做了菜单控制的代码:

第三节 修复建议

1. 在打开管理页面URL或者请求接口时,首先判断当前用户是否拥有该页面的权限,如果没有权限,就判定为攻 击拒绝访问; 2. 使用ESAPI框架进行安全开发

第十章 服务器应用错误页面信息泄露

第一节 漏洞介绍

描述:服务器应用错误页面信息泄露是指服务器应用默认配置了错误页面,默认的错误页面泄露了服务器应用的版本 信息,有时候应用程序的报错,也会直接调用默认的错误页面,导致程序的错误信息也会泄露出来。

潜在危险:低

第二节 默认错误配置页面

tomcat的错误页面: 500页面

404页面

第三节 修复建议

Tomcat的修复方法 :

1.新建一个error.html ,保存在webapps/ROOT/下

2.修改tomcat配置下$CATALINA_HOME/conf/web.xml文件

nginx的配置方法

1. 参考tomcat的修复中的第一步,新建一个报错的error.html

2. 修改nginx.conf文件或者网站的配置文件,在server节点配置一下内容,把常见的错误码,全部指定到404页 面。root节点是404.html页面绝对路径地址

1
---------------------
作者:梭哈王
来源:CSDN
原文:https://blog.csdn.net/weixin_39997829/article/details/88118081
版权声明:本文为博主原创文章,转载请附上博文链接!

标签:
博客主机

给我留言