主题:beetl是否有加入防止XSS、CSRF的安全机制?

echo 2017年01月19日 711

beetl是否有加入防止XSS、CSRF的安全机制?

闲大赋 2017年01月19日

没有内置,但可以使用现成的,比如common-lang ,如下代码做参考


package com.ibeetl.bbs.util;



import org.apache.commons.lang3.StringEscapeUtils;

import org.apache.commons.lang3.StringUtils;

import org.beetl.core.Format;



public class XXSDefenderFormat implements Format {



	@Override

	public Object format(Object data, String pattern) {

		if(data==null){

			return data;

		}

		

		if(data instanceof String){

			String js = (String)data;

			String str = StringEscapeUtils.escapeHtml4(js);

			if(StringUtils.isNotEmpty(pattern)){

				int len = Integer.parseInt(pattern);

				if(str.length()>len){

					str = str.substring(0, len); 

				}

				

			}

			return str;

		}else{

			return data;

		}

		

	}

	

	public static void main(String[] args){

		String js =  "中文<script>hi</script><h5></h5>";

		System.out.println(js);

		js = StringEscapeUtils.escapeHtml4(js);

		System.out.println(js);

	}



}

使用的时候,就像


${"hello,<script>",xxs}


xxs 是你注册的格式化函数


源码参考了  http://git.oschina.net/xiandafu/beetl-bbs/blob/master/src/main/java/com/ibeetl/bbs/util/XXSDefenderFormat.java?dir=0&filepath=src%2Fmain%2Fjava%2Fcom%2Fibeetl%2Fbbs%2Futil%2FXXSDefenderFormat.java&oid=fcd6f65067d3291291e549a0e91df583b7bbd6be&sha=98a749e9e821221ee1791c4188062b3114a9b4b0

  • xinjirufen :这相当于每个输出的地方都要调用防止xss攻击的方法了吗?(2018年03月12日)
  • 闲大赋 :yes(2018年03月12日)
echo 2017年05月01日

${"hello,<script>",xxs}  只是回显的时候才会调用吧 ?我们应该是对请求的数据进行XXS处理。