开发常见网络安全注意事项
(2023-06-09 10:25:50)
标签:
java网络安全 |
分类: iPan_J2EE |
1 短信验证码漏洞
4位短信验证码,有效期超过1分钟的,允许重试的情况下,容易被暴力破解;
修改
1)验证码6位
2)有效期60~90秒
3)24小时内允许尝试10次
2 水平越权
越权访问,这类漏洞是指应用在检查授权(Authorization)时存在纰漏,使得攻击者在获得低权限用户帐后后,可以利用一些方式绕过权限检查,访问或者操作到原本无权访问的高权限功能。在实际的代码安全审查中,这类漏洞往往很难通过工具进行自动化检测,因此在实际应用中危害很大。其与未授权访问有一定差别。
目前存在着两种越权操作类型:横向越权操作和纵向越权操作。前者指的是攻击者尝试访问与他拥有相同权限的用户的资源;而后者指的是一个低级别攻击者尝试访问高级别用户的资源。
修改
这块功能是所有用户共享的,但共享的可见性不一样,后端对可见性的权限需要校验;
后端需根据不同用户的权限做访问校验,一般不允许操作跨平行部门、跨上级部门的操作;
尽量少用详情页面,尽量在列表上全部展现;
3 SQL注入
工具sqlmap
SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。造成SQL注入漏洞原因有两个:一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。
修改
标准做法
1)使用PreparedStatement操作数据库
2)DruidPlugin 配置 WallFilter
其他做法
当不是正常使用JDBC的场景的系统,需要自己对表单做过滤;
1 对前端请求做过滤,过滤条件如下:
// public static final Pattern PATTERN =
Pattern.compile("\\b(and|or|exec|insert|select|drop|grant|alter|union|delete|update|count|chr|mid|master|truncate|char|declare)\\b|(\\*|;|\\+|'|\"|%)");
public static final Pattern PATTERN =
Pattern.compile("\\b(and|or|exec|insert|select|drop|grant|alter|union|delete|update|count|chr|mid|master|truncate|char|declare)\\s+\\b|(;|\\+|')");
2 对后端数据库执行做过滤,使用DruidPlugin 配置 WallFilter;
4 目录浏览
修改
关闭nginx目录浏览功能;
#启用目录浏览
#autoindex on;
#显示的文件时间为GMT时间
#autoindex_localtime off;
#显示出文件的大小,单位是kB或者MB或者GB
#autoindex_exact_size off;
5 敏感信息泄露
敏感数据包括但不限于:口令、密钥、证书、会话标识、License、隐私数据(如短消息的内容)、授权凭据、个人数据(如姓名、住址、电话等)等,在程序文件、配置文件、日志文件、备份文件及数据库中都有可能包含敏感数据。
修改
操作手册中去掉真实用户信息;
后一篇:国内时间同步服务器