常见的JavaWeb安全问题及修复
1.SQL注入:程序向后台数据库传递SQL时,用户提交的数据直接拼接到SQL语句中并执行,从而导入SQL注入攻击。
字符型注入:黑色部分为拼接的问题参数
select * from t_user where name='test' or '1' = '1';
数字型注入:黑色部分为拼接的问题参数(对于强类型语言,字符串转int类型会抛异常。所以这种注入方式一般出现在php等弱类型语言上)
select * from t_user where id=1;drop table t_userinfo;
搜索型注入:对表名进行猜测
select * from t_user where userName like ‘%test%’ and 1=2 union select 1,2 from t_admin';
修复方法:
a、在mybatis中使用#把参数当做一个字符串,不能使用$符号
b、在JDBC中使用预编译的方式对参数进行绑定,详细如下:
String userName = request.getParameter("userName");
String sql = "select * from t_user where userName = ?";
JdbcConnection conn = new JdbcConnection();
PreparedStatement pstmt = conn.preparedStatement(sql);
pstmt.setString(1,userName);
2、XSS跨站脚本攻击(恶意将脚本代码植入到供其他用户使用的页面中)
反射型:经过后端,不经过数据库
存储型:经过后端经过数据库
DOM型:基于文档对象模型DOM,通过控制url参数触发
修复方法:
a、后台设置XSSFilter,继承RequestServletWrapper类,对前端请求中的可控参数进行过滤
b、服务端设置Http-only安全属性,使浏览器控制cookie不被泄露
c、对引入到DOM中的参数使用htmlEncodeByRegExp编码,在对应的展示框中用htmlDecodeByRegExp进行解码(比较常用)
var HtmlUtil = {
/*1.用正则表达式实现html转码*/
htmlEncodeByRegExp:function (str){
var s = "";
if(str.length == 0) return "";
s = str.replace(/&/g,"&");
s = s.replace(/</g,"<");
s = s.replace(/>/g,">");
s = s.replace(/ /g," ");
s = s.replace(/\'/g,"'");
s = s.replace(/\"/g,""");
return s;
},
/*2.用正则表达式实现html解码*/
htmlDecodeByRegExp:function (str){
var s = "";
if(str.length == 0) return "";
s = str.replace(/&/g,"&");
s = s.replace(/</g,"<");
s = s.replace(/>/g,">");
s = s.replace(/ /g," ");
s = s.replace(/'/g,"\'");
s = s.replace(/"/g,"\"");
return s;
}
};
3、敏感信息泄露
程序造成的泄露:
1、服务端返回冗余敏感数据:用户只申请了单个账户的信息,却返回了多个用户的信息
2、将敏感信息直接写在前端页面的注释中
3、写在配置文件的密码未进行编码处理
4、请求参数敏感信息未脱敏处理(可以将数据在前端用RSA加密,后台在进行解密)
5、前端展示的敏感信息,没有在后台进行脱敏处理(后台对数据进行处理,可以将中间部分使用*号代替)
6、越权
4、越权:攻击者能够执行本身没有资格执行的权限
水平越权:权限类型不变,权限Id变化(同等角色下的用户,不但能够访问自己私有的数据,还能访问其他人私有的数据)
垂直越权:权限ID不变,权限类型变化(即低权限的角色通过一些途径,获得高权限的能力)
交叉越权:上面两者的交集
修复方法:
1、根据请求携带的用户信息进行鉴权操作,对当前请求携带的用户信息进行用户角色和数据权限匹配。每一个重要操作的功能、分步操作的每个阶段都进行权限判断。权限不足就中断操作。
5、文件下载:
任意文件下载:下载服务器的任意文件,web业务的代码,服务器和系统的具体配置信息,也可以下载数据库的配置信息,以及对内网的信息探测等等
文件越权下载:
修复方法:
1、针对任意文件下载的修复,增加当前请求下载的文件上一级的绝对路径同配置文件中允许下载的路径直接的比较(file.getCanonicalFile().getParent()获取上一级的绝对路径)
if(!file.getCanonicalFile().getParent().equals(new File(Constants.TMP_PATH).getCanonicalPath())){
return ;
}
2、文件越权下载:允许下载之前对请求所带的用户信息进行判断,拥有足够的权限菜允许下载。
6、文件上传:网络攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。
修复方法:
1、客户端、服务端白名单验证(不建议用黑名单),客户端的校验不够安全,很容易被绕过。
String fileName = file.getOriginalFilename();
String extName = fileName.subString(fileName.lastIndexof(".")+1);
获取上传文件的后缀名,并同白名单上的后缀名进行比较,包含在白名单上则允许通过,不包含则直接中断请求。
2、MiME类型检测:文件上传时浏览器会在Header中添加MIMETYPE识别文件类型,服务端要对此进行检测。
String mime = file.getContentType();//获取文件的ContentType类型值
同白名单上的contentType类型名进行比较,包含在白名单上则允许通过,不包含则直接中断请求。
3、文件内容检测:用不同的方法将不同的文件内容流的进行读取。
BufferedImage image = ImageIO.read(file.getInputStream());
7、CSRF:跨站请求伪造,完成CSRF攻击,需要完成两个步骤:1、登录受信任的网站A,并在本地生成cookie;2、在不登出A的情况下,访问危险网站B
CSRF本质原因:Web的隐式身份验证机制。Web的身份验证机制虽然可以保证请求来自用户的浏览器,但是无法保证该请求时用户批准发送的。
修复方法:
CSRF Token校验:在页面中添加一个hidden用于存放token字段,请求发送时携带token到服务端,服务端校验token值是否准确。不准确直接中断操作
常见的JavaWeb安全问题及修复的更多相关文章
- 【常见Web应用安全问题】---4、Directory traversal
Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些. 常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Si ...
- 【常见Web应用安全问题】
Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些. 常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Sit ...
- javaWeb安全漏洞修复总结
1 Web安全介绍1 2 SQL注入.盲注1 2.1 SQL注入.盲注概述 1 2.2 安全风险及原因 2 2.3 AppScan扫描建议 2 2.4 应用程序解决方案 4 3 会话标识未更新7 3. ...
- web开发常见的几大安全问题
一.SQL注入 SQL注入是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击.SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求 ...
- 常见IE浏览器bug及其修复方案(双外边距、3像素偏移、绝对定位)
1. 双外边距浮动bug IE6和更低版本中存在双外边距浮动bug,顾名思义,这个Windows bug使任何浮动元素上的外边距加倍 bug重现: <!DOCTYPE html> < ...
- 常见的web安全问题总结
we安全对于web前端从事人员也是一个特别重要的一个知识点,也是面试的时候,面试官经常问的安全前端问题.掌握一些web安全知识,提供安全防范意识,今天就会从几个方面说起前端web攻击和防御的常用手段 ...
- PHP常见的十个安全问题
相对于其他几种语言来说, PHP 在 web 建站方面有更大的优势,即使是新手,也能很容易搭建一个网站出来.但这种优势也容易带来一些负面影响,因为很多的 PHP 教程没有涉及到安全方面的知识. 此帖子 ...
- 【转】web常见安全问题以及测试方法
web安全是我们测试组一直以来作为和性能测试并驾齐驱的两个重点.开发的过程中还需要着重注意,该转义的地方转义:该屏蔽的地方屏蔽,该过滤的地方过滤等等.年底又到了,势必又有大批的发号抽奖之类的活动开发. ...
- Python 中的 10 个常见安全漏洞,以及如何避免(下)
简评:编写安全代码很困难,当你学习一个编程语言.模块或框架时,你会学习其使用方法. 在考虑安全性时,你需要考虑如何避免被滥用,Python 也不例外,即使在标准库中,也存在用于编写应用的不良实践.然而 ...
随机推荐
- 温习排序算法(基于C指针)
以前学过的数据结构课,貌似已经忘得一干二净了,偶然又翻起,书中最后一章详细介绍了7种排序算法,现在对其中4种做个总结.(为啥只总结4种,当然是因为偷懒,只想总结简单又常用的!) 先贴一张排序分类图: ...
- spring-boot logback配置
接着上篇的代码,日志在不同环境下的配置也不一样,所以要分开配置,主要使用maven的profile 1.1 在pom.xml中添加 <profiles> <profile> & ...
- python 循环 while
count = 1while count <= 5: print("大家好!") count = count + 1 结果:while 可以进行循环, count 表示计数, ...
- java 对象的一点小问题
List<A> list = new ArrayList(); A a = new A(); for(int i=0;i<3;i++) { a.setI(i); list.add(A ...
- Visual Studio 的插件及常用快捷键_ 系统Ubuntu16.04
安装在 Ubuntu 的系统上 1, 常用的快捷键 [1] 调出终端: Ctrl + `(反引号); [2] 调出插件安装界面: Ctrl + P (打开插件面板) ---> 输入 ext i ...
- sqlserver 导入excel
安装完office2013和sqlserver2017时,不知道是盗版问题还是啥 原因, 在sqlserver导入excel时,报错. 在把Excel导入SQL server时出现“未在本地计算机上注 ...
- vue进阶--外卖商家页
一.准备工作 1.vue特性:轻量级.简洁.高效.组件化.数据驱动 2.技术分析:使用vue- resource与后端交互(ajax通信,ie9+) 使用vue-router作为前端路由 bet ...
- [macOS] Mojave10.14 夜神安卓模拟器启动问题
废话不多说,其它的都有在这里讨论: https://bbs.yeshen.com/forum.php?mod=viewthread&tid=8566 我的最终解决办法是,virtualbox安 ...
- sql sugar
事务 using (var db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = Config.xxx, DbType ...
- 从后台拿到echarts的数据值,求出百分比
从后台拿到数据是一个数组的格式 例: var arr = [6,4,0,0,0,0,0,0]; 后来得到新的需求,需要鼠标移入的时候提示数量和百分比,数量本身就可以拿到, 求百分比的时候:先拿到数组最 ...