互联网相关安全性方面

1.XXS 注入

概述:当我们使用jquery在页面渲染数据时,可能会用到以下几个方法:$('xxx').html();$('xxx').text();$('xxx').append();其中有可能发生XXS注入。

示例:用户提交的内容为<script>alert("Kyle注入");</script>这时如果你用text()方法渲染那自然没有问题, 但是如果你用html()append()去渲染就会被注入,不相信自己可以去试下.

危害:

1.轻危就弹你一个提示窗口

2.可以获取到当前登录用户的所有cookie信息及登录后的所有信息

3.可以暗地操作当前登录用户的相关操作等

解决方法:

1.渲染时我们尽量用text()方法渲染

2.如果一定需要用html()append()渲染用户提交的相关数据,那么我就必需用到相关过滤的方法处理

3.jsp页面里面的渲染可以使用自定义方法进行相关过滤处理

2.SQL注入

概述:利用现有应用程序,将(恶意)SQL命令注入到后台数据库引擎执行的能力。

示例:如果判断Web环境是否可以SQL注入。如果URL仅是对网页的访问,不存在SQL注入问题,如:http://*.xxxx.com就是普通的网页访问。只有对数据库进行动态查询的业务才可能存在SQL注入, 如:http:// *.xxxx.com /xxxx?val=,其中val1表示数据库查询变量,这种语句会在数据库中执行,因此可能会给数据库带来威胁。 String sql = "select * from where id = ?",如果id的值是1 or 1=1;或者1";"delete .....

危害:

1.未经授权状况下操作数据库中的数据

2.恶意篡改网页内容

3.私自添加系统帐号或者是数据库使用者帐号

4.网页挂木马

解决方法:

1.java用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setxxx方法传值即可

String sql= "select* from users where username = ? and password=?;

PreparedStatement preState= conn.prepareStatement(sql);

preState.setString(1, userName);

preState.setString(2, password);

ResultSet rs= preState.executeQuery();

                              

2.后台过滤,简单的验证数据格式/长度正确,过滤/转义各种特殊符号;包含有 单引号('),分号(;) 双引号(")和 注释符号(--)

3.前台过滤,对于必要的input输入信息进行格式验证;尤其有对于用户名、密码之类的页面最好设置验证码(防止猜测的注入,减轻服务器压力)

3.传输/存储加密

概述:数据的重要性大家应该都清楚,由其用户的隐私数据安全问题越来越受到重视(如:CSDN事件),所以我们需要对自己的关键数据进行有效的保护.

危害:

1.泄漏用户隐私数据

2.泄漏服务器的相关重要信息.如:数据库用户名和密码等

3.重要数据在通信中被篡改

解决方法:

1.合理设置每个接口,查询出来的数据过滤掉用户的相关隐私数据

2.重要的通信传输应该进行加密处理,比如通过https

3.数据库字段存储,重要信息字段应当加密存储。

4.程序中连接数据库的密码不能保存为明文,需要进行加密处理防止被泄露,合理分配数据库用户权限(越细越安全)

5.数据库服务器设置IP访问限制.(跟运维或者DBA进行是否已设置)

6.用户的重要信息都不应该出现在日志当中,密码等重要信息不管是否加密都不应该出现在日志出中。

4.权限验证

概述:就是为了控制权限的,每种角色都有自己特定的与公共的权限,这些权限的逻辑关系是相当复杂的,如果一个Web应用在角色上没有一个详细的合理的设计, 将会给开发人员带来无限接下来的痛苦和麻烦。

示例:某网站用户有这些角色:其一可以说是游客,就是浏览者没有登录的角色;其二就是注册用户;其三就是VIP用户;根据业务扩展,可能还会出现更多用户角色

危害:

1.导致A用户可以篡改B用户的相关数据

2.可以操作自己没有权限的相关请求

3.不需要登录就可以任意操作相关请求

解决方法:

1.合理验证每个用户的权限

2.即使是登录用户在执行相关重要操作时必需要再次验证。如:添加,删除相关操作

3.付费等相关重要操作,都要通过远程验证方法验证等

4.服务器对请求方需要永远保持不信任原则,都需要进行相关的验证

 

猜你喜欢

转载自longxy520.iteye.com/blog/2259360