日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jsp工程防止外部注入_XPATH注入详解|OWASP Top 10安全风险实践(五)

發布時間:2024/7/23 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jsp工程防止外部注入_XPATH注入详解|OWASP Top 10安全风险实践(五) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文為一些列連載文章之一,不定期更新,計劃目錄如下:

OWASP介紹

SQL注入

命令注入

XML外部實體注入

XPATH注入

反射式、DOM及存儲XSS

失效的身份認證和會話管理

不安全的直接對象引用

安全配置錯誤

敏感信息泄露

功能級訪問控制缺失

跨站請求偽造

服務端請求偽造

文件上傳漏洞

未驗證的重定向和轉發

不安全的反序列化

使用含有已知漏洞的組件

一、?????注入

注入攻擊漏洞,例如SQL,OS 以及 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); Iterator>iter = 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[name='wah' or'1'='1']/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(); 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安全风险实践(五)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。