关于Fortify中的漏洞以及修复方案

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="">

则返回给用户的页面会出现一个提示框或者一个图片。用户无法正常使用网页。

解决方案

根据原因分析,其主要解决方案如下:

  1. 对输入源进行校验和过滤
  2. 对输出源进行校验和过滤
    其实就是对浏览器脚本中出现的一些特殊字符做替换。提供一个公共类
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 = Pattern.compile(specialStrRegex);
		Matcher ma = pattern.matcher(encode);
		if (ma.find()) {
			encode = ma.replaceAll("");
		}
		return encode;
	}
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值