java web 安全 注意事项,常见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(/

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加密,后台在进行解密)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值