Web和java代码安全问题

扫描所用工具
APPSCAN web扫描工具
Fortify java扫描工具

1登录后要清掉session和cookie
实现
//清除掉以前的session
request.getSession(true).invalidate();//清空session
Cookie cookie = request.getCookies()[0];//获取cookie
cookie.setMaxAge(0);//让cookie过期

2登录五次后如果依然失败等待几分钟后才能 重试
代码太多,明白啥意思就行,没啥技术难度
3登录的时不能提示账号错误还是密码错误
账号密码错误的返回时应该是一样的返回参数和表现形式
4登录要有过期时间
Session设置过期时间
5 mybatis 尽量用#{}不要用&{}减少sql语句注入
6 mybatis 对于sql语句中类型有要求的一定要在应用层做好防护,比如分页limit一定要是数字等
7对于前台参数是字符串的参数在应用层要做好参数过滤。比如对于一些数据库敏感字符做出处理
实现,或者数字溢出等

//比较笨的过滤sql字符串
public static String doFilter(String str){
str=str.replaceAll("\.","。");
str=str.replaceAll(":",":");
str=str.replaceAll(";",";");
str=str.replaceAll("&","&");
str=str.replaceAll("<",“<”);
str=str.replaceAll(">",“>”);
str=str.replaceAll("’","'");
str=str.replaceAll(""","“");
str=str.replaceAll("–","--");
str=str.replaceAll("/","/");
str=str.replaceAll("%","%");
str=str.replaceAll("\+", “+”);
str=str.replaceAll("\(", “(”);
str=str.replaceAll("\)", “)”);
return str;
}
其实不光这些还有参数是否为空,整数是不是溢出等等要做全面的验证
8所有的验证都应该由服务器端进行验证
9请求中不可以带着用户信息和标识(从后台获取)
放session里从后台取
10服务器端设置个过滤器添加几个头设置为了安全
实现
//1设置安全头
response.setHeader(“Access-Control-Allow-Origin”, request.getHeader(“Origin”));
response.setHeader(“Access-Control-Allow-Methods”, “POST, GET”);//允许跨域的请求方式
response.setHeader(“Access-Control-Max-Age”, “3600”);//预检请求的间隔时间
response.setHeader(“Access-Control-Allow-Headers”, “Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token,Access-Control-Allow-Headers”);//允许跨域请求携带的请求头
response.setHeader(“Access-Control-Allow-Credentials”,“true”);//若要返回cookie、携带seesion等信息则将此项设置我true
response.setHeader(“strict-transport-security”,“max-age=16070400; includeSubDomains”);//简称为HSTS。它允许一个HTTPS网站,要求浏览器总是通过HTTPS来访问它
//为了安全做的头处理 暂时用不了 前段太多东西跟它冲突
response.setHeader(“Content-Security-Policy”,“upgrade-insecure-requests”);
//response.setHeader(“Content-Security-Policy”,“default-src ‘self’”);//这个响应头主要是用来定义页面可以加载哪些资源,减少XSS的发生
response.setHeader(“X-Content-Type-Options”,“nosniff”);//互联网上的资源有各种类型,通常浏览器会根据响应头的Content-Type字段来分辨它们的类型。通过这个响应头可以禁用浏览器的类型猜测行为
response.setHeader(“X-XSS-Protection”,“1; mode=block”);//1; mode=block:启用XSS保护,并在检查到XSS攻击时,停止渲染页面
response.setHeader(“X-Frame-Options”,“SAMEORIGIN”);//SAMEORIGIN:不允许被本域以外的页面嵌入;
11跨站点请求伪造 使用token验证 请求是不是自己网页发出的
说下实现流程登录成功后生成一个token随机数然后返回给前台,前台留下它,前台拦截每次请求用head带上这个token,通过后台过滤器每次验证前后台token是否相同来实现目的
12对于需要释放的资源一定要关闭或者释放 比如输入输出流等
13catch中要打日志不要只是输出到控制台
14使用 HTTP 动词篡改的认证旁路 刨除所有除了getpost以外请求
过滤器里
if(!“GET”.equals(method)&&!“POST”.equals(method)&&!“HEAD”.equals(method))
{
Sessionoutre.refeifa(response);
return;
}
我猜测还有其他方法比如这个https://blog.csdn.net/liutinghui989/article/details/88845707
感觉正规些而且还解决了TRAC 需要关闭的问题,但我没有试过。
15关于权限不只是对于显示的验证。对于权限下的每一个接口都应该做权限校验
16当错误访问达到一定次数需要进行ip封掉的操作来禁掉攻击操作
17不要把任何程序报的错误返回给前台。
解决办法:在action里catch所有错误然后返回一个自定义的错误页面
18 使用https不要使用http了
心得:怀疑一切从前台传来的请求和参数。

我也是安全方面的初学者会的就是用些扫描工具扫一扫程序。这些是我遇到的一些和解决办法。
代码技术是vue和springboot,跟大家分享,希望大家也可以讨论共同学习共同进步
说明:
这些解决办法都是网上找的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值