常见安全漏洞和解决方案 下载本文

内容发布更新时间 : 2024/12/26 23:26:11星期一 下面是文章的全部内容请认真阅读。

1.1 身份认证安全

1.1.1 弱密码

? ? ?

密码长度6个字符以上

密码字符必须包含大写字母、小写字母和数字,并进行密码复杂度检查 强制定期更换密码

1.1.2 密码存储安全

密码存储必须使用单向加密

单纯的md5,sha1容易被破解,需要添加随机的盐值salt

涉及支付及财产安全的需要更高的安全措施,单纯的密码加密已经不能解决问题。 可以考虑手机验证码、数字证书、指纹验证。

1.1.3 密码传输安全

1.1.3.1 密码前端加密

用户名、密码传输过程对称加密,可以使用密钥对的对称加密,前端使用公钥加密,后端使用私钥解密。

前端加密示例

引入脚本,rsa加密工具和md5加密工具 ... 前端加密脚本,省略了提交步骤 … … 注意:前端密码加密如果还用了md5加密的,先md5加密再rsa加密。

后端解密,省略了其他验证步骤 ShiroUserServiceImpl.java … … public ShiroUser getUser(String name, Integer userType, Integer } loginType) { name= RSAUtils.decryptBase64(name); … … publicbooleandoValidUser(ShiroUser shiroUser, String password) { } password = RSAUtils.decryptBase64(password);

1.1.3.2 启用https协议

登录页面、支付页面等高危页面强制https协议访问。

前端加密和https可以结合使用

1.2 SQL注入

1.2.1 描述

SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想

得知的数据,这就是所谓的SQL Injection,即SQL注入。

1.2.2 解决办法

1. 养成编程习惯,检查用户输入,最大限度的限制用户输入字符集合。

2. 不要把没有检查的用户输入直接拼接到SQL语句中,断绝SQL注入的注入点。 ? SQL中动态参数全部使用占位符方式传参数。 正确 ... List params = new ArrayList(); String sql = \params.add(username); ... 正确 ... Map params = new HashMap(); String sql = \params.put(\... 错误

... String sql = \... ? 如果不能使用占位符的地方一定要检查SQL中的特殊符号和关键字,或者启用用户输

入白名单,只有列表包含的输入才拼接到SQL中,其他的输入不可以。 String sql = \ + SqlTools.filterInjection(tablename); 1.2.3 应急解决方案

nginx过滤规则naxsi模块 axsi_nbs.rules ## Enables learning mode #LearningMode; SecRulesEnabled; #SecRulesDisabled; DeniedUrl \## check rules CheckRule \CheckRule \