专业济南网站建设价格,合肥瑶海区邮编,c .net怎么做网站,家具网站案例本文为一些列连载文章之一#xff0c;不定期更新#xff0c;计划目录如下#xff1a;OWASP介绍SQL注入命令注入XML外部实体注入XPATH注入反射式、DOM及存储XSS失效的身份认证和会话管理不安全的直接对象引用安全配置错误敏感信息泄露功能级访问控制缺失跨站请求伪造服务端请… 本文为一些列连载文章之一不定期更新计划目录如下OWASP介绍SQL注入命令注入XML外部实体注入XPATH注入反射式、DOM及存储XSS失效的身份认证和会话管理不安全的直接对象引用安全配置错误敏感信息泄露功能级访问控制缺失跨站请求伪造服务端请求伪造文件上传漏洞未验证的重定向和转发不安全的反序列化使用含有已知漏洞的组件一、 注入注入攻击漏洞例如SQLOS 以及 LDAP注入。这些攻击发生在当不可信的数据作为命令或者查询语句的一部分被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器以执行计划外的命令或者在未被恰当授权时访问数据。Xpath注入漏洞利用演示页面功能通过用户名查询对应用户的电话号码。用户名和电话号码存储在XML文件中。XML文件内容如下正常查询和恶意利用结果对比如下漏洞危害说明用户输入的字符被用于XPATH的查询表达式中这些恶意编造的字符会获取XML文件中非授权数据从而用于执行身份验证、数据使用或者其它操作等漏洞代码分析publicvoiddoPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { File f new File(D:\\Tomcat-7.0.55\\webapps\\owasp\\xml\\telphone.xml); xpath_bad(request,response, f);} privatevoidxpath_bad(HttpServletRequest request, HttpServletResponseresponse, File f) throws ServletException,IOException { Stringlname request.getParameter(username1); String xpath /user_name_phone/user[name lname ]/phone; SAXReadersaxReader new SAXReader(); Documentdocument null; try { document saxReader.read(f); } catch(DocumentException e) { e.printStackTrace(); } Elementroot document.getRootElement(); List list root.selectNodes(xpath); Iteratoriter list.iterator(); Stringstr ; if(!iter.hasNext()) { str 用户不存在!; request.setAttribute(xname,lname.toString()); request.setAttribute(xphone,str.toString()); } else { while(iter.hasNext()) { Elementelement (Element) iter.next(); Stringtelno element.getText(); Stringtelname element.getParent().elementText(name); str str telname.toString() : telno.toString() ; ; } request.setAttribute(xname,lname.toString()); request.setAttribute(xphone,str.toString()); } request.getRequestDispatcher(/jsp/xpath_sqldemo.jsp).forward(request, response);}用户输入的数据未进行任何合法性验证直接代入执行了Xpath查询。如果用户输入了恶意数据如wah’ or ‘1’’1则查询表达式为/user_name_phone/user[namewah or11]/phone表示查询所有用户的电话号码。漏洞代码修复用户输入的XPATH查询数据在服务端正式处理前进行合法性验证对用户输入数据中的单引号和双引号进行转义避免用户恶意输入的单引号或双引号被当成XPATH查询表达式的分隔符解释屏蔽XPATH查询时的出错信息参数化XPath查询将需要构建的XPath查询表达式以变量的形式表示变量不是可以执行的脚本。防止Xpath注入可使用a.使用ESAPI提供的方法对输入进行验证publicvoiddoPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { File f new File(D:\\Tomcat-7.0.55\\webapps\\owasp\\xml\\telphone.xml); xpath_good_esapi(request,response, f);}privatevoidxpath_good_esapi(HttpServletRequest request,HttpServletResponse response, Filef) throws ServletException, IOException { Stringlname request.getParameter(username1); lname ESAPI.encoder().encodeForXPath(lname); Stringxpath /user_name_phone/user[name lname ]/phone; SAXReadersaxReader new SAXReader(); Documentdocument null; try { document saxReader.read(f); } catch(DocumentException e) { e.printStackTrace(); } Elementroot document.getRootElement(); Listlist root.selectNodes(xpath); Iteratoriter list.iterator(); Stringstr ; if(!iter.hasNext()) { …… } else { …… } request.getRequestDispatcher(/jsp/xpath_sqldemo.jsp).forward(request, response); }b.自定义校验方法过滤特殊字符privatevoidxpath_good(HttpServletRequest request,HttpServletResponse response, File f) throwsServletException,IOException { Stringlname request.getParameter(username1); Stringxpath /user_name_phone/user[name lname ]/phone; try { if (checkValueForXpathInjection(lname)) { …… }else{ …… } } catch (Exceptione) { e.printStackTrace(); } } publicboolean checkValueForXpathInjection(String value) throws Exception { boolean isValid true; if ((value ! null) !.equals(value)) { StringxpathCharList ()[]:,*/ ; StringdecodedValue URLDecoder.decode(value, Charset.defaultCharset().name()); for (char c :decodedValue.toCharArray()) { if(xpathCharList.indexOf(c) ! -1) { isValid false; break; } } } 了解新钛云服新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照深耕专业矗立鳌头新钛云服获千万Pre-A轮融资原电讯盈科中国区副总裁加入新钛云服「附专访」新钛云服打造最专业的Cloud MSP做企业业务和云之间的桥梁新钛云服一周年完成两轮融资服务五十多家客户上海某仓储物流电子商务公司混合云解决方案新钛云服出品的部分精品技术干货国内主流公有云VPC使用对比及总结万字长文云架构设计原则|附PDF下载刚刚OpenStack 第 19 个版本来了附28项特性详细解读Ceph OSD故障排除|万字经验总结七个用于Docker和Kubernetes防护的安全工具运维人的终身成长从清单管理开始|万字长文OpenStack与ZStack深度对比架构、部署、计算存储与网络、运维监控等什么是云原生IT混合云战略是什么、为什么如何构建