Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 91精品国产自产91精品,久久精品一区,国产91色综合久久免费

          整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          SpringBoot如何防止XSS腳本攻擊?

          么是XSS腳本攻擊?

          XSS(Cross-Site Scripting,跨站腳本攻擊)是一種常見的 Web 攻擊技術(shù),攻擊者通過在 Web 頁面中插入惡意的腳本代碼,使得用戶在瀏覽頁面時執(zhí)行這些腳本,從而達到攻擊的目的。通常被分為如下的三種類型。

          存儲型 XSS(Stored XSS)

          攻擊者將惡意腳本代碼存儲在服務(wù)器上的數(shù)據(jù)庫或文件中,當(dāng)用戶訪問包含這些惡意代碼的頁面時,會執(zhí)行這些代碼。

          反射型 XSS(Reflected XSS)

          攻擊者將惡意腳本代碼作為參數(shù)注入到URL中,當(dāng)用戶點擊包含這些惡意參數(shù)的URL時,服務(wù)器端將參數(shù)反射回頁面并執(zhí)行,從而觸發(fā)XSS攻擊。

          DOM 型 XSS(DOM-based XSS)

          攻擊者利用客戶端腳本對DOM(Document Object Model,文檔對象模型)進行操作的漏洞,通過修改頁面的DOM結(jié)構(gòu)來執(zhí)行惡意代碼。

          常見的XSS攻擊防御手段

          • 過濾和清理用戶輸入數(shù)據(jù),移除或轉(zhuǎn)義HTML標(biāo)簽和特殊字符
          • 使用 Content Security Policy(CSP)來限制頁面資源加載和執(zhí)行的范圍。
          • 使用安全的編碼函數(shù)來處理用戶輸入和輸出,如HTML編碼、URL編碼等
          • 對于敏感操作和數(shù)據(jù),使用HttpOnly標(biāo)記和Secure標(biāo)記來設(shè)置Cookie的屬性,防止被竊取和劫持。
          • 對于存儲型XSS,嚴(yán)格控制用戶輸入的內(nèi)容,并對輸入數(shù)據(jù)進行驗證和過濾。
          • 對于反射型XSS,驗證和過濾所有用戶提交的數(shù)據(jù),包括URL參數(shù)、表單數(shù)據(jù)等。
          • 對于DOM型XSS,避免直接使用用戶輸入的數(shù)據(jù)操作DOM,盡量使用安全的DOM操作方式。

          如何實現(xiàn)?

          SpringBoot可以通過使用過濾器或攔截器來對請求參數(shù)進行過濾和清理,防止惡意的XSS腳本注入。下面是一種通過過濾器實現(xiàn)防止XSS攻擊的方法。

          創(chuàng)建一個自定義的過濾器,用于過濾請求中的參數(shù),并清理其中的HTML標(biāo)簽和特殊字符。

          @WebFilter("/*")
          public class XSSFilter implements Filter {
              @Override
              public void init(FilterConfig filterConfig) throws ServletException {
                  // 初始化操作,可以留空
              }
              @Override
              public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
                  chain.doFilter(new XSSRequestWrapper((HttpServletRequest) request), response);
              }
              @Override
              public void destroy() {
                  // 銷毀操作,可以留空
              }
              static class XSSRequestWrapper extends HttpServletRequestWrapper {
                  XSSRequestWrapper(HttpServletRequest request) {
                      super(request);
                  }
                  @Override
                  public String getParameter(String name) {
                      String value = super.getParameter(name);
                      if (value != null) {
                          value = cleanXSS(value);
                      }
                      return value;
                  }
                  private String cleanXSS(String value) {
                      // 進行 XSS 過濾,清理 HTML 標(biāo)簽和特殊字符
                      // 例如,可以使用正則表達式或者第三方庫進行過濾
                      // 這里只是簡單示例,具體過濾規(guī)則需根據(jù)實際情況自行設(shè)計
                      return value.replaceAll("<", "<")
                                  .replaceAll(">", ">")
                                  .replaceAll("\"", """)
                                  .replaceAll("'", "'")
                                  .replaceAll("&", "&");
                  }
              }
          }

          在SpringBoot應(yīng)用的配置類中注冊該過濾器。

          @Bean
          public FilterRegistrationBean<XSSFilter> xssFilterRegistration() {
              FilterRegistrationBean<XSSFilter> registration = new FilterRegistrationBean<>();
              registration.setFilter(new XSSFilter());
              registration.addUrlPatterns("/*");
              registration.setName("xssFilter");
              registration.setOrder(1);
              return registration;
          }

          上述代碼,我們創(chuàng)建了一個名為XSSFilter的過濾器,在doFilter方法中,對請求進行過濾,并在需要時使用XSSRequestWrapper對請求參數(shù)進行清理。清理過程中,我們簡單地將 HTML 標(biāo)簽和一些特殊字符替換為相應(yīng)的轉(zhuǎn)義序列,以防止惡意腳本注入。

          請注意,這只是一種簡單的示例,實際場景中應(yīng)根據(jù)具體情況制定更為嚴(yán)格的過濾規(guī)則。

          互聯(lián)網(wǎng)誕生起,安全威脅就--直伴隨著網(wǎng)站的發(fā)展,各種Web攻擊和信息泄露也從未停止。2011年中國互聯(lián)網(wǎng)領(lǐng)域爆出兩樁比較大的安全事故,一樁是新浪微博遭XSS攻擊,另一樁是以CSDN為代表的多個網(wǎng)站泄露用戶密碼和個人信息。特別是后者,因為影響人群廣泛,部分受影響網(wǎng)站涉及用戶實體資產(chǎn)和交易安全,一時成為輿論焦點。



          這里列舉常用的幾中攻擊方式:

          一、XSS攻擊

          xss攻擊即跨站點腳本攻擊( Cross Site Script), 指黑客通過篡改網(wǎng)頁,注入惡意HTML腳本,保存在網(wǎng)站的服務(wù)器,在用戶瀏覽網(wǎng)頁時,控制用戶瀏覽器進行惡意操作的一種攻擊方式。

          XSS攻擊相對而言是一種“古老”的攻擊手段,卻又歷久彌新,不斷變化出新的攻擊花樣,許多以前認為不可能用來攻擊的漏洞也逐漸被攻擊者利用。因此XSS防攻擊也是非常復(fù)雜的。主要手段有如下兩種。

          1、過濾消毒

          xss攻擊者一般都是通過在請求中嵌入惡意腳本達到攻擊的目的,這些腳本是一般用戶輸入中不使用的,如果進行過濾和消毒處理,即對某些html 危險字符轉(zhuǎn)義,如“>”轉(zhuǎn)義為“>"、“<”轉(zhuǎn)義為“<” 等,就可以防止大部分攻擊。為了避免對不必要的內(nèi)容錯誤轉(zhuǎn)義,如“3<5”中的“<”需要進行文本匹配后再轉(zhuǎn)義,如“<img src=”這樣的上下文中的“<" 才轉(zhuǎn)義。事實上,消毒幾乎是所有網(wǎng)站最必備的XSS防攻擊手段。

          2、HttpOnly

          最早由微軟提出,即瀏覽器禁止頁面JavaScript訪問帶有HttpOnly屬性的Cookie。

          HttpOnly并不是直接對抗XSS攻擊的,而是防止XSS攻擊者竊取Cookie。對于存放敏感

          信息的Cookie,如用戶認證信息等,可通過對該Cookie添加HttpOnly屬性,避免被攻擊

          腳本竊取。


          二、注入攻擊

          注入攻擊主要有兩種形式,SQL 注入攻擊和OS注入攻擊。SQL注入攻擊的原理如下。攻擊者在HTTP請求中注入惡意SQL命令( drop table users;),服務(wù)器用請求參數(shù)構(gòu)造數(shù)據(jù)庫SQL命令時,惡意SQL被一起構(gòu)造,并在數(shù)據(jù)庫中執(zhí)行。


          SQL注入攻擊需要攻擊者對數(shù)據(jù)庫結(jié)構(gòu)有所了解才能進行,攻擊者獲取數(shù)據(jù)庫表結(jié)構(gòu)信息的手段有如下幾種:比如網(wǎng)站使用了開源的組件、錯誤提示返回數(shù)據(jù)結(jié)構(gòu)信息等。常用防御方式有兩種:

          1、過濾

          和防XSS攻擊一樣,請求參數(shù)消毒是一種比較簡單粗暴又有效的手段。通過正則匹配,過濾請求數(shù)據(jù)中可能注入的SQL,如“ drop table" 、“ \b(?:updatelb.*?\bset|delete\b\W*?\bfrom)b"等。

          2、參數(shù)綁定

          使用預(yù)編譯手段,綁定參數(shù)是最好的防SQL注入方法。目前許多數(shù)據(jù)訪問層框架,如IBatis, Hibernate等,都實現(xiàn)SQL預(yù)編譯和參數(shù)綁定,攻擊者的惡意SQL會被當(dāng)做SQL的參數(shù),而不是SQL命令被執(zhí)行。

          除了SQL注入,攻擊者還根據(jù)具體應(yīng)用,注入OS命令、編程語言代碼等,利用程序漏洞,達到攻擊目的。


          三、CSRF攻擊

          CSRF ( Cross Site Request Forgery,跨站點請求偽造),攻擊者通過跨站請求,以合法用戶的身份進行非法操作,如轉(zhuǎn)賬交易、發(fā)表評論等。CSRF的主要手法是利用跨站請求,在用戶不知情的情況下,以用戶的身份偽造請求。其核心是利用了瀏覽器Cookie或服務(wù)器Session策略,盜取用戶身份。


          相應(yīng)地,CSRF的防御手段主要是識別請求者身份。主要有下面幾種方法。

          1、表單token

          CSRF是一個偽造用戶請求的操作,所以需要構(gòu)造用戶請求的所有參數(shù)才可以。表單Token通過在請求參數(shù)中增加隨機數(shù)的辦法來阻止攻擊者獲得所有請求參數(shù):在頁面表單中增加一個隨機數(shù)作為Token,每次響應(yīng)頁面的Token都不相同,從正常頁面提交的請求會包含該Token值,而偽造的請求無法獲得該值,服務(wù)器檢查請求參數(shù)中Token的值是否存在并且正確以確定請求提交者是否合法。

          2、驗證碼

          相對說來,驗證碼則更加簡單有效,即請求提交時,需要用戶輸入驗證碼,以避免在用戶不知情的情況下被攻擊者偽造請求。但是輸入驗證碼是一個糟糕的用戶體驗,所以請在必要時使用,如支付交易等關(guān)鍵頁面。

          3、Referer check

          HTTP請求頭的Referer域中記錄著請求來源,可通過檢查請求來源,驗證其是否合法。很多網(wǎng)站使用這個功能實現(xiàn)圖片防盜鏈(如果圖片訪問的頁面來源不是來自自己網(wǎng)站的網(wǎng)頁就拒絕)。


          三、其他攻擊和漏洞

          以上只是列舉常見的三種,還有一些其他的也常被黑客利用,比如錯誤堆棧信息直接返回敏感信息,HTML注釋有敏感信息,文件上傳只沒有限制文件類型(黑客上傳惡意腳本),路徑遍厲等

          天,從開發(fā)人員的角度,說說《如何防范常見的Web攻擊》話題。

          SQL注入攻擊

          SQL注入攻擊,這個是最常聊到的話題,使用過Java的開發(fā)人員,第一個反應(yīng)就是一定要使用預(yù)編譯的PrepareStatement,是吧?

          什么是SQL注入攻擊

          攻擊者在HTTP請求中注入惡意的SQL代碼,服務(wù)器使用參數(shù)構(gòu)建數(shù)據(jù)庫SQL命令時,惡意SQL被一起構(gòu)造,并在數(shù)據(jù)庫中執(zhí)行。

          用戶登錄,輸入用戶名 lianggzone,密碼 ‘ or ‘1’=’1 ,如果此時使用參數(shù)構(gòu)造的方式,就會出現(xiàn)

          select * from user 
           where name = 'lianggzone' 
           and password = '' or '1'='1'
          

          不管用戶名和密碼是什么內(nèi)容,使查詢出來的用戶列表不為空。

          現(xiàn)在還會存在SQL注入攻擊么

          這個問題在使用了預(yù)編譯的PrepareStatement后,安全性得到了很大的提高,但是真實情況下,很多同學(xué)并不重視,還是會留下漏洞的。舉個例子,看看,大家的代碼中對 sql 中 in 操作,使用了預(yù)編譯,還是仍然還是通過字符串拼接呢?

          如何防范SQL注入攻擊

          使用預(yù)編譯的PrepareStatement是必須的,但是一般我們會從兩個方面同時入手。

          Web端

          • 有效性檢驗。
          • 限制字符串輸入的長度。

          服務(wù)端

          • 不用拼接 SQL 字符串。
          • 使用預(yù)編譯的 PrepareStatement。
          • 有效性檢驗。(為什么服務(wù)端還要做有效性檢驗?第一準(zhǔn)則,外部都是不可信的,防止攻擊者繞過Web端請求)
          • 過濾 SQL 需要的參數(shù)中的特殊字符。比如單引號、雙引號。

          XSS攻擊

          什么是XSS攻擊

          跨站點腳本攻擊,指攻擊者通過篡改網(wǎng)頁,嵌入惡意腳本程序,在用戶瀏覽網(wǎng)頁時,控制用戶瀏覽器進行惡意操作的一種攻擊方式。

          假設(shè)頁面上有一個表單

          <input type="text" name="name" value="梁桂釗"/>
          

          如果,用戶輸入的不是一個正常的字符串,而是

          "/><script>alert("haha")</script><!-
          

          此時,頁面變成下面的內(nèi)容,在輸入框input的后面帶上了一段腳本代碼。

          <input type="text" name="name" value="梁桂釗"/><script>alert("haha")</script><!-"/>
          

          這端腳本程序只是彈出一個消息框,并不會造成什么危害,攻擊的威力取決于用戶輸入了什么樣的腳本,只要稍微修改,便可使攻擊極具攻擊性。

          XSS攻擊有多可怕

          蠻早之前,我曾經(jīng)找了幾個網(wǎng)站做個測試,其實大家對XSS攻擊的防范還是不夠,都成功的注入了測試腳本。

          甚至,還有攻擊者提交惡意的javascript代碼的評論信息或者反饋信息(這些信息,正常客戶端沒有做xss校驗,會存在客戶端注入問題),所有訪問者訪問該內(nèi)容時,都會執(zhí)行這段惡意的javascript代碼。

          如何防范XSS攻擊

          • 前端,服務(wù)端,同時需要字符串輸入的長度限制。
          • 前端,服務(wù)端,同時需要對HTML轉(zhuǎn)義處理。將其中的”<”,”>”等特殊字符進行轉(zhuǎn)義編碼。

          CSRF攻擊

          什么是CSRF攻擊

          跨站點請求偽造,指攻擊者通過跨站請求,以合法的用戶的身份進行非法操作。可以這么理解CSRF攻擊:攻擊者盜用你的身份,以你的名義向第三方網(wǎng)站發(fā)送惡意請求。CRSF能做的事情包括利用你的身份發(fā)郵件,發(fā)短信,進行交易轉(zhuǎn)賬,甚至盜取賬號信息。

          如何防范CSRF攻擊

          • 安全框架,例如Spring Security。
          • token機制。在HTTP請求中進行token驗證,如果請求中沒有token或者token內(nèi)容不正確,則認為CSRF攻擊而拒絕該請求。
          • 驗證碼。通常情況下,驗證碼能夠很好的遏制CSRF攻擊,但是很多情況下,出于用戶體驗考慮,驗證碼只能作為一種輔助手段,而不是最主要的解決方案。
          • referer識別。在HTTP Header中有一個字段Referer,它記錄了HTTP請求的來源地址。如果Referer是其他網(wǎng)站,就有可能是CSRF攻擊,則拒絕該請求。但是,服務(wù)器并非都能取到Referer。很多用戶出于隱私保護的考慮,限制了Referer的發(fā)送。在某些情況下,瀏覽器也不會發(fā)送Referer,例如HTTPS跳轉(zhuǎn)到HTTP。

          文件上傳漏洞

          什么是文件上傳漏洞

          文件上傳漏洞,指的是用戶上傳一個可執(zhí)行的腳本文件,并通過此腳本文件獲得了執(zhí)行服務(wù)端命令的能力。

          許多第三方框架、服務(wù),都曾經(jīng)被爆出文件上傳漏洞,比如很早之前的Struts2,以及富文本編輯器等等,可能被一旦被攻擊者上傳惡意代碼,有可能服務(wù)端就被人黑了。

          如何防范文件上傳漏洞

          • 文件上傳的目錄設(shè)置為不可執(zhí)行。
          • 判斷文件類型。在判斷文件類型的時候,可以結(jié)合使用MIME Type,后綴檢查等方式。因為對于上傳文件,不能簡單地通過后綴名稱來判斷文件的類型,因為攻擊者可以將可執(zhí)行文件的后綴名稱改為圖片或其他后綴類型,誘導(dǎo)用戶執(zhí)行。
          • 對上傳的文件類型進行白名單校驗,只允許上傳可靠類型。
          • 上傳的文件需要進行重新命名,使攻擊者無法猜想上傳文件的訪問路徑,將極大地增加攻擊成本,同時向shell.php.rar.ara這種文件,因為重命名而無法成功實施攻擊。
          • 限制上傳文件的大小。
          • 單獨設(shè)置文件服務(wù)器的域名。

          訪問控制

          一般來說,“基于URL的訪問控制”是最常見的。

          垂直權(quán)限管理

          訪問控制實際上是建立用戶與權(quán)限之間的對應(yīng)關(guān)系,即“基于角色的訪問控制”,RBAC。不同角色的權(quán)限有高低之分。高權(quán)限角色訪問低權(quán)限角色的資源往往是被允許的,而低權(quán)限角色訪問高權(quán)限的資源往往被禁止的。在配置權(quán)限時,應(yīng)當(dāng)使用“最小權(quán)限原則”,并使用“默認拒絕”的策略,只對有需要的主體單獨配置”允許”的策略,這在很多時候能夠避免發(fā)生“越權(quán)訪問”。

          例如,Spring Security, Apache Shiro都可以建立垂直權(quán)限管理。

          水平權(quán)限管理

          水平權(quán)限問題在同一個角色上,系統(tǒng)只驗證了訪問數(shù)據(jù)的角色,沒有對角色內(nèi)的用戶做細分,由于水平權(quán)限管理是系統(tǒng)缺乏一個數(shù)據(jù)級的訪問控制所造成的,因此水平權(quán)限管理又可以稱之為“基于數(shù)據(jù)的訪問控制”。

          舉個理解,比如我們之前的一個助手產(chǎn)品,客戶端用戶刪除評論功能,如果沒有做水平權(quán)限管理,即設(shè)置只有本人才可以刪除自己的評論,那么用戶通過修改評論id就可以刪除別人的評論這個就存在危險的越權(quán)操作。

          這個層面,基本需要我們業(yè)務(wù)層面去處理,但是這個也是最為經(jīng)常遺落的安全點。

          總結(jié)

          上面列舉的幾個話題,都是我在開發(fā)過程中,遇到的比較常見的Web安全話題,以及一些防范方案,需要我們在開發(fā)過程中及時規(guī)避,而不是依靠安全人員或者真正用戶,甚至惡意的攻擊者幫我們?nèi)グl(fā)現(xiàn)問題。當(dāng)然,還有很多Web安全話題,例如遠程執(zhí)行漏洞、拒絕服務(wù)攻擊、Session保持攻擊等等

          喜歡的小伙伴,點個關(guān)注吧!


          主站蜘蛛池模板: 国产精品亚洲一区二区无码 | 日韩内射美女人妻一区二区三区| 亚洲福利一区二区精品秒拍| 亚洲.国产.欧美一区二区三区| 国产一区二区三区免费观看在线 | 果冻传媒董小宛一区二区| 伊人久久精品无码麻豆一区| 色欲综合一区二区三区| 亚洲一区二区女搞男| 一区二区三区在线免费观看视频| 亚洲熟妇无码一区二区三区| 99精品一区二区三区| 国产综合无码一区二区辣椒| 国产福利电影一区二区三区,亚洲国模精品一区 | 国模无码一区二区三区| 国产成人久久精品区一区二区 | 国产精品揄拍一区二区久久| 久久综合精品不卡一区二区| 亚洲一区二区精品视频| 99偷拍视频精品一区二区| 竹菊影视欧美日韩一区二区三区四区五区 | 国产av天堂一区二区三区| 一区二区三区在线播放| 国产情侣一区二区三区| 久夜色精品国产一区二区三区| 亚洲成a人一区二区三区| 国产福利电影一区二区三区久久久久成人精品综合 | 呦系列视频一区二区三区| 一区二区不卡在线| 最新中文字幕一区| 卡通动漫中文字幕第一区| 三级韩国一区久久二区综合| 国产在线观看精品一区二区三区91| 国产精品无码一区二区在线| 日本精品一区二区三本中文 | 无码人妻精品一区二区三区久久| 日本不卡一区二区三区视频| 肉色超薄丝袜脚交一区二区| 中字幕一区二区三区乱码| 国产一区二区三区在线免费观看| 无码AⅤ精品一区二区三区|