最近在做一个网站,由于我是刚毕业不久,之前做的也是内部使用的mis系统,没有做过网站。在网站大部分功能都完成的时候,部署在真实环境时邀请了安全方面的人员进行了测试,结果就发现以上三种安全漏洞。
sql注入发生在操作数据库的时候拼凑sql语句;目录遍历则发生在由于网站分为前台和后台管理,是两个不同的工程,前台需要下载文件时就使用java里面的File类,在传进来的参数没有进行处理就直接使用导致了可以通过../之类的方式下载任何可以访问的文件;xss则是来源于网站上面有个提问的模块,在那里输入的数据没有进行处理导致显示时会执行。
下面就是我现在解决这些问题的方法:
应对sql注入:尽可能使用PreparedStatement,在不能使用的时候对参数进行校验,判断是否存在select,or ,and等关键字。
目录遍历:判断参数和文件名的包含../等文件名不该出现的字符,加密文件名也是一种不错的处理方式。
xss:用户在提问和发帖子的时候,没有对用户输入的内容是否含有脚本等代码进行处理,比较简单的方式是对<、>等进行转码,直接在页面上显示,但是个人自己写的难免会有遗漏,所以我是使用commons-lang进行转码的。当然,也可以对输入进行判断,当是脚本等代码时就提示不允许。
以上只是基本的处理方式,欢迎提出批评建议。