Access Control:DataBase的漏洞
出现原因
如果在程序中简单的使用findById(String id)这个方法,攻击者就有可能使用脚本进行攻击,使其该表中的所有用户信息。比如
for(int i=0; i<10000;i++){
findById(i);
}
通过类似的代码就可以获取所有用户信息。
解决方案
可以通过在该方法上加上别的限定条件。如findByIdAndUserName(String id, String userName);这样子攻击者就不能获取该用户以外的用户信息。
Cross-Site Scripting: Reflected(XXS跨站脚本攻击)
出现原因
未检验包含在动态内容中的数据,便将其传送给了 Web 用户。
代码如下
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from emp where id="+eid);
if (rs != null) {
rs.next();
String name = rs.getString("name");
}
ServletOutputStream out = response.getOutputStream();
out.print("Employee Name: " + name);
...
out.close();
如果name为正常值,则程序运行无偿,如果name是
<script>
alert("1");
</scritp>
或者name是
<image src="">
则返回给用户的页面会出现一个提示框或者一个图片。用户无法正常使用网页。
解决方案
根据原因分析,其主要解决方案如下:
- 对输入源进行校验和过滤
- 对输出源进行校验和过滤
其实就是对浏览器脚本中出现的一些特殊字符做替换。提供一个公共类
public Class Utils{
/**
* XXSFilterUtil
*/
private XXSFilterUtil() {
throw new IllegalStateException("Utility class");
}
/**
* specialStrRegex
*/
private static String specialStrRegex = "[`~!@#$%^&*()\\+\\=\\{}|:\"?><【】\\/r\\/n]";
/**
* filerSpecialChar
*
* @param input
* @return
*/
public static String filerSpecialChar(String input) {
String encode = Normalizer.normalize(input, Normalizer.Form.NFKC);
Pattern pattern = Patternpile(specialStrRegex);
Matcher ma = pattern.matcher(encode);
if (ma.find()) {
encode = ma.replaceAll("");
}
return encode;
}
}
更多推荐
关于Fortify中的漏洞以及修复方案
发布评论