当前位置: 首页 > news >正文

南通城市建设集团网站虹口网站建设

南通城市建设集团网站,虹口网站建设,标志设计公司网站,最全的数据网站问题描述#xff1a; 这个问题是在我写javaweb项目#xff0c;做敏感词过滤时出现的 需求是#xff1a;如果是由 getParameter(String s) 得到的数据#xff0c;可以直接修改value值#xff0c;将含有敏感词的部分替换为 *** request.getParameterMap() 方法返回一个包…问题描述 这个问题是在我写javaweb项目做敏感词过滤时出现的 需求是如果是由 getParameter(String s) 得到的数据可以直接修改value值将含有敏感词的部分替换为 *** request.getParameterMap() 方法返回一个包含 HTTP 请求参数的不可修改的映射。 这样设计的主要原因是为了保护请求参数的安全性和请求的一致性。HTTP 请求参数在发送到服务器端之前已经被解析和存储起来以供服务器端使用。如果允许修改参数值可能会导致以下问题 安全性问题允许直接修改请求参数可能会导致恶意用户进行参数篡改和数据注入攻击从而危害系统安全。 请求一致性问题由于请求参数在多个地方会被使用如果允许修改参数值可能会造成请求的不一致性导致系统无法准确处理请求。 因此为了保持请求参数的完整性和安全性request.getParameterMap() 方法返回的映射是不可修改的。 错误代码 if (method.getName().equals(getParameterMap)){Map map (Map) method.invoke(servletRequest, args);//通过getParameterMap获取到的map是不允许修改的if (map ! null){Set set map.keySet();for (Object o : set){String key (String) o;String[] value (String[]) map.get(key);//增强for一般不用来增加和删除for (String s : vocabularyList){if (value[0].contains(s)){ // value[0] value[0].replaceAll(s, ***);//这里内容没有修改原因应该也是不允许修改参数映射value[0] ***;map.put(key, value);//这里java.lang.IllegalStateException: 不允许修改锁定的参数映射}return map;}}}} 解决方案是用HashMap(Map m)重新new一个map在新的map中修改值并返回新的map if (method.getName().equals(getParameterMap)){Map old (Map) method.invoke(servletRequest, args);//增强返回值MapString, String[] values new HashMap(old); //获取返回值if (!values.isEmpty()){for (String key : values.keySet()){String[] value values.get(key);for (String str : vocabularyList){if (value[0].contains(str)){ //只取String[]的第一个值value[0] value[0].replaceAll(str, ***);values.put(key, value);}}}}return values;} 完整的代码 WebFilter(/*) public class SensitiveVocabularyFilter implements Filter {private final ArrayListString vocabularyList new ArrayListString();Overridepublic void init(FilterConfig filterConfig) throws ServletException{BufferedReader br null;try{//获取txt的文件位置String realPath filterConfig.getServletContext().getRealPath(/WEB-INF/classes/敏感词汇.txt);//读取文件br new BufferedReader(new FileReader(realPath));//将读取的每一行数据添加到vocabularyList中String line null;while ((line br.readLine()) ! null){vocabularyList.add(line);}}catch (Exception e){e.printStackTrace();}finally{try{assert br ! null;br.close();}catch (IOException e){e.printStackTrace();}}System.out.println(vocabularyList);}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException{//1.创建代理对象增强getParameter方法ServletRequest proxy_request (ServletRequest) Proxy.newProxyInstance(servletRequest.getClass().getClassLoader(), servletRequest.getClass().getInterfaces(), new InvocationHandler() {Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable{//执行处理逻辑,增强Parameter方法if (method.getName().equals(getParameter)){//如果我取到的参数值和敏感词汇中的相同则需要将这个值改为***String value (String) method.invoke(servletRequest, args);//如果获取的参数不为空if (value ! null){for (String vocabulary : vocabularyList){if (value.contains(vocabulary)){value value.replaceAll(vocabulary, ***);}}return value;}}//判断方法名是否是 getParameterMap/* if (method.getName().equals(getParameterMap)){Map map (Map) method.invoke(servletRequest, args);//通过getParameterMap获取到的map是不允许修改的if (map ! null){Set set map.keySet();for (Object o : set){String key (String) o;String[] value (String[]) map.get(key);//增强for一般不用来增加和删除for (String s : vocabularyList){if (value[0].contains(s)){value[0] value[0].replaceAll(s, ***);//java.lang.IllegalStateException: 不允许修改锁定的参数映射 // value[0] ***;map.put(key, value);//这里java.lang.IllegalStateException: 不允许修改锁定的参数映射}return map;}}}}*///判断方法名是否是 getParameterMap//解决new一个新的mapif (method.getName().equals(getParameterMap)){Map old (Map) method.invoke(servletRequest, args);//增强返回值MapString, String[] values new HashMap(old); //获取返回值if (!values.isEmpty()){for (String key : values.keySet()){String[] value values.get(key);for (String str : vocabularyList){if (value[0].contains(str)){ //只取String[]的第一个值value[0] value[0].replaceAll(str, ***);values.put(key, value);}}}}return values;}//判断方法名是否是 getParameterValueif (method.getName().equals(getParameterValues)){String[] value (String[]) method.invoke(servletRequest, args);//需要把敏感词汇txt每一行的字符都搞到一个字符串数组中if (value ! null){for (String str : vocabularyList){for (int i 0; i value.length; i){if (value[i].contains(str)){value[i].replaceAll(str, ***);}}}}return value;}return method.invoke(servletRequest, args);}});//2.放行filterChain.doFilter(proxy_request, servletResponse);}Overridepublic void destroy(){} }
http://wiki.neutronadmin.com/news/408851/

相关文章:

  • 网站开发合同协议电子商务网站模版
  • 建立个人网站视频教程wordpress更新需要连接ftp
  • 潍坊网页网站制作wordpress 七牛图床
  • 长治网络推广公司关键词优化排名易下拉霸屏
  • 购物网站 开发公司网站建设维保协议
  • 网站建设与运营实训总结宁波网站关键词排名提升
  • 重庆手机网站推广流程网站如何做淘宝推广
  • 企业网站开发韵茵百度网站收录入口
  • 个人简历模板免费下载网站宝安网站建设seo信科
  • 广东省 网站制作免费建网站抚顺
  • 运城网站建设多少钱丈哥seo博客工具
  • 产品商城网站建设百度怎么做网站域名
  • 专门做网站的公司有哪些免费送衣服在哪个网站做
  • 首涂模板网站游戏传奇
  • 盗版视频网站怎么做怎么在阿里巴巴做网站
  • 网页图片不显示网络优化公司排名
  • 做美瞳网站需要什么资质darna wordpress
  • 做音乐网站要多少钱福建凭祥建设工程有限公司网站
  • 引流推广网站销售流程八个步骤
  • 往建设厅网站上传东西重庆网站推广哪家服务好
  • 网站建设专wordpress注册导航
  • 国外室内设计网站推荐网络营销是什么?
  • 网站设计公司大概多少钱利川网站网站建设
  • 门户网站app有哪些一番赏公众号开发
  • 做网站app需要多少钱企业大全企业名录
  • 阿里云 wordpress 建站 教程天津互联网公司排名
  • 多网站怎么做seo网站建设 51下拉
  • 个体户可以注册网站建设服务搜索引擎推广文案
  • 做企业网站应该注意什么毕业设计网页设计题目
  • 建设部网站执业资格做坑人网站二维码