jsp工程防止外部注入_XPATH注入详解|OWASP Top 10安全风险实践(五)
本文為一些列連載文章之一,不定期更新,計劃目錄如下:
OWASP介紹
SQL注入
命令注入
XML外部實體注入
XPATH注入
反射式、DOM及存儲XSS
失效的身份認證和會話管理
不安全的直接對象引用
安全配置錯誤
敏感信息泄露
功能級訪問控制缺失
跨站請求偽造
服務端請求偽造
文件上傳漏洞
未驗證的重定向和轉發
不安全的反序列化
使用含有已知漏洞的組件
一、?????注入
注入攻擊漏洞,例如SQL,OS 以及 LDAP注入。這些攻擊發生在當不可信的數據作為命令或者查詢語句的一部分,被發送給解釋器的時候。攻擊者發送的惡意數據可以欺騙解釋器,以執行計劃外的命令或者在未被恰當授權時訪問數據。
Xpath注入
漏洞利用演示
頁面功能:通過用戶名查詢對應用戶的電話號碼。用戶名和電話號碼存儲在XML文件中。XML文件內容如下:
正常查詢和惡意利用結果對比如下:
漏洞危害說明
用戶輸入的字符被用于XPATH的查詢表達式中,這些惡意編造的字符會獲取XML文件中非授權數據,從而用于執行身份驗證、數據使用或者其它操作等;
漏洞代碼分析
漏洞代碼修復
用戶輸入的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(); List>list = root.selectNodes(xpath); Iterator>iter = 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混合云戰略:是什么、為什么,如何構建?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的jsp工程防止外部注入_XPATH注入详解|OWASP Top 10安全风险实践(五)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java密码框提示_[Java教程]如何
- 下一篇: python 取余_玩转Python源码