JavaWeb后台安全问题
电话面试
- https交互
- json交互的,校验json格式,输入校验,长度范围限制,防止数据库脏数据
- 净化输入:净化包括从删除用户输入字符串后面的空格到去除值等一切行为。常见的净化输入示例是使用URL编码或者HTML编码来包装数据,并将其作为文本而不是可执行脚本来处理。
- 输出编码:输出编码是转换输入数据为输出格式的过程。输出格式不包含或者只是有选择性的包含允许的特殊字符
- 输出的重量有:
1) 支持HTML代码的输出
2) 不支持HTML代码的输出
3) URL的输出
4) 页面内容的输入
5) Js脚本的输出
6) Style样式的输出
7) Xml数据的输出
8) 服务空间的输出
- 后台用户名和密码是否是明文保存的?加盐
- 管理成员是否有权限的划分:系统,数据库权限
- 是否有管理日志功能。建议增加服务的访问日志,记录来访者的IP,传递参数,对后台操作用户建立日志,记录其操作内容。完善的日志记录可以帮助你发现潜在的危险,找到已经发生的问题。
- SQL注入漏洞。应使用PreparedStatement
- 文件上传一定要做类型检查,一些jsp,php,asp等程序文件坚决不能让其上传
本系统主要通过对上传文件详细的格式验证:
第一步:通过后缀名来简单判断文件的格式。
第二步:通过读取文件的前两个字符进行对比,例如png格式图片的前两个字符为8950,而jpg格式的图片前两个字符为ffd8。
第三步:如果上传的为图片,则获取相应的高度和宽度,如果存在相应的宽度和高度则可认为上传的是图片。
本系统在对文件进行存储时会将文件名进行重命名处理,并且设置相应的web服务器,默认不显示目录。因为文件上传如果需要执行代码,则需要用户能够访问到这个文件,因此使用随机数改写了文件名,将极大的增加攻击的成本,甚至根本无法成功实施攻击。
- 关闭web服务器的错误回显功能,这样可以防止攻击者对系统进行攻击后,通过回显的详细错误信息对攻击内容进行调整,对攻击者提供极大的便利。我们在项目的web.xml文件中添加以下示例代码:
解决方案:在数据库访问层中不要使用“+”来拼接SQL语句!
PreparedStatement pstmt = con.prepareStatement("SELECT * FROM USERS WHERE UNAME=?");
- Java WEB容器默认配置漏洞。如TOMCAT后台管理漏洞,默认用户名及密码登录后可直接上传war文件获取webshell。
- 合法用户“注销”后,在未关闭浏览器的情况下,点击浏览器“后退”按钮,可从本地页面缓存中读取数据,绕过了服务端filter过滤。
解决方案:配置filter对存放敏感信息的页面限制页面缓存。如:
httpResponse.setHeader("Cache-Control","no-cache");
httpResponse.setHeader("Cache-Control","no-store");
httpResponse.setDateHeader("Expires", 0);
httpResponse.setHeader("Pragma","no-cache");
- 修改默认端口