Web安全加固
一、针对于SQL注入的防范
问题原因:当项目中登录模块的SQL查询相关的语句如下图所示为拼接语句时,在用户登录界面用户名处输入万能密码admin' or 1=1 --',密码处输入任意字符,点击登录,一般可以绕过后台登录系统。admin' or 1=1 --'放到SQL语句中会使user_name ='admin' or 1=1成为永真语句,并且--会注释掉语句后面的密码部分,从而实现绕过后台登录。
方法:使用PreparedStatement方法完成SQL语句的执行,该方法要求在执行SQL语句之前,必须告诉JDBC哪些值作为输入参数,解决了普通Statement方法的注入问题,极大的提高了SQL语句执行的安全性。sql注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql语句以及进行其他方式的攻击,动态生成Sql语句时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。对于Java数据库连接JDBC而言,SQL注入攻击只对Statement有效,对PreparedStatement是无效的,这是因为PreparedStatement方法要求在执行SQL语句之前,必须告诉JDBC哪些值作为输入参数,不允许在不同的插入时间改变查询的逻辑结构,解决了普通Statement方法的注入问题,极大的提高了SQL语句执行的安全性。
二、XSS跨站防范
问题原因:在HTML中,某些字符是预留的。例如小于号 < 和大于号 > ,浏览器在解析他们时会误认为它们是标签。如果希望正确地显示预留字符,我们必须在HTML源代码中使用字符实体(character entities)。在项目中可以提交代码的部分可以成为恶意用户进行攻击的地方。
常见字符的实体转换表 | |||
显示结果 | 描述 | 实体名称 | 实体编号 |
| 空格 |
|
|
< | 小于号 | < | < |
> | 大于号 | > | > |
& | 和号 | & | & |
" | 引号 | " | " |
' | 撇号 | ' (IE不支持) | ' |
方法:在项目中编写代码,在用户提交留言和评论信息时将<和>分别替换为<>。
三、上传攻击防范
问题原因:在网站中寻找能够上传文件的位置,尝试上传菜刀马。任意文件的上传可能会给恶意用户留下上传木马文件的机会,这将会造成项目中的重要信息数据泄露。
方法:在项目中可以上传文件的位置多增加一步对上传文件类型的限制,可在一定程度上防止被上传恶意文件。