解决提交表单时Xss攻击的问题
来源:互联网 发布:马尔科夫转移矩阵法 编辑:程序博客网 时间:2024/06/03 09:24
之前一直做内网系统,都是局域网,对安全问题一直考虑不周。
有一天对自己线上的表单做了一个测试,将<script>alert("xxx")</script>作为表单选项提交,在后台回显时,可想而知,后台弹出了一个alert("xxx")的巨大的bug。
而如果提交的是一个对象,对每个表单的每一项都进行下判断,又太麻烦,于是改装了一下工具类。不完善,后期需要可以手动改,附上代码:
import java.lang.reflect.Field;import java.lang.reflect.Method;public class XssValidate {public static boolean getObjectValue(Object object) throws Exception {boolean result = true;if (object != null) {// 拿到该类Class<?> clz = object.getClass();// 获取实体类的所有属性,返回Field数组Field[] fields = clz.getDeclaredFields();for (Field field : fields) {// 如果类型是Stringif (field.getGenericType().toString().equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名// 拿到该属性的getter方法Method m = (Method) object.getClass().getMethod("get" + getMethodName(field.getName()));String val = (String) m.invoke(object);// 调用getter方法获取属性值if (val != null && (val.contains("script") || val.contains("<"))) {result = false;break;}}}}return result;}// 把一个字符串的第一个字母大写、效率是最高的、private static String getMethodName(String fildeName) throws Exception {byte[] items = fildeName.getBytes();items[0] = (byte) ((char) items[0] - 'a' + 'A');return new String(items);}}
上面是利用反射,将所有的表单属性值的字符串校验一下,判断有没有xml攻击的特殊字符。
在调用时,如下:
try {boolean validate = XssValidate.getObjectValue(applicationVo);if (!validate) {throw new RuntimeException("表单信息中含有非法字符,请检查");}//TODO} catch (Exception e) {String error = e.getMessage();try {response.getWriter().print("<script type='text/javascript'>alert('保存失败"+(StringUtils.isNotBlank(error) ? ("," + error) : "") +"!');history.back(-1);</script>");} catch (IOException e1) {e1.printStackTrace();}}
阅读全文
1 0
- 解决提交表单时Xss攻击的问题
- 解决表单提交时的乱码问题
- php表单提交数据的验证处理(防SQL注入和XSS攻击等)
- Ajax提交表单时的中文乱码问题的解决
- 解决ajax提交表单时中文乱码的问题
- 解决表单get方式提交时的中文乱码问题
- python提交表单时属性名重复问题的解决
- Struts2解决表单重复提交的问题
- 使用token解决表单提交的问题
- 解决表单重复提交的问题
- 富文本编辑器 xss 攻击的解决
- 解决XSS攻击漏斗的过滤器
- python的flask解决xss攻击漏洞
- 解决后台提交表单时,重复刷新页面时候重复提交数据的问题。
- 解决表单重复提交问题
- 解决表单重复提交问题
- 解决表单重复提交问题
- Jquery实现异步提交表单,解决多表单提交的问题
- 二叉树遍历(已知中序和按层遍历求先序 递归)
- 网络编程概述和三要素(IP/端口号/协议)以及Socket通信原理
- 字符串与16进制转化
- linux系统下编写I2C驱动
- Android学习笔记一之Android基础
- 解决提交表单时Xss攻击的问题
- 用冒泡排序的算法对输入的字符串进行排序
- 单例模式
- Android传输数据时MD5加密解密详解
- Excel创建组一样可以完成隐藏和取消隐藏的功能
- JAVA_多线程_单例模式
- 读《它们没大脑但它们有智能》
- Android学习笔记二之Android基础
- Vim 快捷键一览表