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 国产视频首页,www.伊人网,一区二区三区网站

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          SpringBoot如何防止XSS腳本攻擊?

          SpringBoot如何防止XSS腳本攻擊?

          么是XSS腳本攻擊?

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

          存儲型 XSS(Stored XSS)

          攻擊者將惡意腳本代碼存儲在服務器上的數據庫或文件中,當用戶訪問包含這些惡意代碼的頁面時,會執行這些代碼。

          反射型 XSS(Reflected XSS)

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

          DOM 型 XSS(DOM-based XSS)

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

          常見的XSS攻擊防御手段

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

          如何實現?

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

          創建一個自定義的過濾器,用于過濾請求中的參數,并清理其中的HTML標簽和特殊字符。

          @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 標簽和特殊字符
                      // 例如,可以使用正則表達式或者第三方庫進行過濾
                      // 這里只是簡單示例,具體過濾規則需根據實際情況自行設計
                      return value.replaceAll("<", "<")
                                  .replaceAll(">", ">")
                                  .replaceAll("\"", """)
                                  .replaceAll("'", "'")
                                  .replaceAll("&", "&");
                  }
              }
          }

          在SpringBoot應用的配置類中注冊該過濾器。

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

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

          請注意,這只是一種簡單的示例,實際場景中應根據具體情況制定更為嚴格的過濾規則。

          .Thymeleaf 介紹

          1.1 Thymeleaf 簡介

          Thymeleaf是用于Web和獨立環境的現代服務器端Java模板引擎。能夠處理 HTML、XML、JavaScript、CSS 甚至純文本。
          Thymeleaf 的主要目標是提供一種優雅且高度可維護的模板創建方式。為了實現這一點,它建立在自然模板的概念之上,以不影響模板用作設計原型的方式將其邏輯注入模板文件。這改善了設計的溝通并彌合了設計和開發團隊之間的差距。
          Thymeleaf 的設計從一開始就考慮到了 Web 標準——尤其是 HTML5——允許您在需要時創建完全驗證模板。

          官網
          https://www.thymeleaf.org/

          官方文檔
          https://www.thymeleaf.org/documentation.html

          1.2 Thymeleaf 特性

          • 動靜結合:Thymeleaf 在有網絡和無網絡的環境下皆可運行,即它可以讓美工在瀏覽器查看頁面的靜態效果,也可以讓程序員在服務器查看帶數據的動態頁面效果。這是由于它支持 html 原型,然后在 html 標簽里增加額外的屬性來達到模板+數據的展示方式。瀏覽器解釋 html 時會忽略未定義的標簽屬性,所以 thymeleaf 的模板可以靜態地運行;當有數據返回到頁面時,Thymeleaf 標簽會動態地替換掉靜態內容,使頁面動態顯示。
          • 開箱即用:它提供標準和spring標準兩種方言,可以直接套用模板實現JSTL、 OGNL表達式效果,避免每天套模板、該jstl、改標簽的困擾。同時開發人員也可以擴展和創建自定義的方言。
          • 多方言支持:Thymeleaf 提供spring標準方言和一個與 SpringMVC 完美集成的可選模塊,可以快速的實現表單綁定、屬性編輯器、國際化等功能。
          • 與SpringBoot完美整合,SpringBoot提供了Thymeleaf的默認配置,并且為Thymeleaf設置了視圖解析器,我們可以像以前操作jsp一樣來操作Thymeleaf。代碼幾乎沒有任何區別,就是在模板語法上有區別。

          1.3 Thymeleaf語法

          1.3.1 表達式

          - th::利用H5的自定義屬性實現,需要支持H5,不支持時需要使用data-th:代替
          - ${...}:變量表達式,類似el表達式,獲取接口綁定的變量數據
          - *{...}:選擇變量表達式,通常情況下與變量表達式一致,但是當指定了變量后,可以使用選擇表達式直接引用對象的屬性名而不是通過對象.屬性
          - #{...}:消息表達式,用于展示消息內容,也可以引用變量內容,常用于國際化
          - @{...}:鏈接表達式,設置超鏈接時使用,與th:href等標簽配合
          - ~{...}:片段表達式,將重復使用的內容提取出來引用

          1.3.2 渲染標簽

          - th:id:替換標簽的id屬性值,
          - th:value:替換標簽的value屬性值,該標簽通常用于input標簽中,為其value屬性賦值
          - th:href:替換標簽的href屬性值(a標簽),<a th:href="@{index.html}">超鏈接</a>
          - th:src:替換標簽的src屬性值(img等標簽),<script type="text/javascript" th:src="@{index.js}"></script>
          - th:text:設置當前元素的文本內容,相同功能的還有th:utext,兩者的區別在于前者不會轉義html標簽,后者會。優先級不高:order=7。
          - th:utext:支持使用html的文本替換當前標簽內容
          - th:object:替換標簽中的對象
          - th:each:遍歷變量中的值,迭代對象可以是java.util.List,java.util.Map,數組等數據類型;
          - th:if:條件語句,取值應為布爾類型,如果為false則當前標簽內容不顯示
          - th:unless:條件語句,取值應為布爾類型,如果為true則當前標簽內容不顯示
          - th:switch:條件語句,取值對應case內容,只顯示對應case標簽
          - th:case:請求返回綁定user對象的集合數據,user對象包含name、age、gender等屬性,此時模板頁使用條件和遍歷標簽渲染數據有以下形式。

          2.SpringBoot集成Thymeleaf

          整體代碼結構如下:

          2.1 maven 依賴

          在pom文件中引入freemarker,當然在SpringBoot中是通過引入SpringBoot已經提供好的starter。完整的pom依賴引入如下:

            <dependencies>
                  <!-- thymeleaf -->
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-thymeleaf</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-web</artifactId>
                  </dependency>
          
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-test</artifactId>
                      <scope>test</scope>
                  </dependency>
                  <dependency>
                      <groupId>org.projectlombok</groupId>
                      <artifactId>lombok</artifactId>
                  </dependency>
              </dependencies>
          

          2.2 配置文件

          spring:
            application:
              name: springboot-thymeleaf
            thymeleaf:
              # 是否啟用模板緩存。
              cache: false
              # 是否檢查模板位置是否存在。
              check-template: true
              # 是否為Web框架啟用Thymeleaf視圖分辨率。
              enabled: true
              # 編碼格式, 默認UTF-8
              encoding: UTF-8
              # 應用于模板的模板模式。另請參閱Thymeleaf的TemplateMode枚舉。
              mode: HTML
              # 后綴 默認 .html
              suffix: .html
              # 模板文件存放位置  , 默認 classpath:/templates/
              prefix: classpath:/templates/

          2.3 演示業務代碼

          我們建一個用戶實體

          @Data
          public class User {
          
              private String username;
          
              private Integer age;
          
              private String email;
          
              private String address;
          }
          

          創建Controller類并提供請求方法

          @Controller
          public class UserController {
          
              @GetMapping("/")
              public String getStudents(Model model) {
                  List<User> list=new ArrayList<>();
                  User userOne=new User();
                  userOne.setUsername("小明");
                  userOne.setAge(12);
                  userOne.setEmail("xxx@qq.com");
                  userOne.setAddress("安徽省合肥市");
                  list.add(userOne);
          
                  User userTwo=new User();
                  userTwo.setUsername("小紅");
                  userTwo.setAge(13);
                  userTwo.setEmail("xxx@126.com");
                  userTwo.setAddress("安徽省合肥市");
                  list.add(userTwo);
          
                  model.addAttribute("users", list);
                  return "users";
              }
          }

          users.html頁面代碼如下:

          <!DOCTYPE html>
          <html lang="en" xmlns="http://www.w3.org/1999/xhtml"
                xmlns:th="http://www.thymeleaf.org">
          <head>
              <meta charset="UTF-8">
              <title>Title</title>
          </head>
          <body>
          <table border="1">
              <thead>
              <tr>
                  <th>名稱</th>
                  <th>年齡</th>
                  <th>郵件</th>
                  <th>地址</th>
              </tr>
              </thead>
              <tbody>
              <!-- 遍歷集合,如果被遍歷的變量 users 為 null 或者不存在,則不會進行遍歷,也不報錯-->
              <tr th:each="user : ${users}">
                  <td th:text="${user.username}"></td>
                  <td th:text="${user.age}"></td>
                  <td th:text="${user.email}"></td>
                  <td th:text="${user.address}"></td>
              </tr>
              </tbody>
          </table>
          </body>
          </html>

          2.4 測試結果

          啟動項目,我們打開鏈接http://127.0.0.1:8080/

          篇文章跟大家簡單介紹了一下spring boot常用的集中模板引擎,因為對groovy和mustache模板引擎了解的比較少,所以這兩個就沒給大家介紹,本次就簡單介紹一下這兩個模板引擎如何在spirng boot中使用。

          Groovy:在我的了解中,groovy是一種兼容java的開發語言,我目前開發的項目就是使用的Grails框架結合groovy語言。但是使用這個模板引擎還是第一次用。網上是這樣說的:Groovy語言包含了一個模板引擎功能,可以生成各種類型的格式化文件,非常方便。模板引擎有下面幾個,它們都實現了Template接口:

          • SimpleTemplateEngine - 基本的模板

          • StreamingTemplateEngine - 功能和 SimpleTemplateEngine相同,不過支持大于64k的模板

          • GStringTemplateEngine - 將模板保存為可寫的閉包,在流式場景中很有用

          • XmlTemplateEngine - 輸出XML文件的模板引擎

          • MarkupTemplateEngine - 一個完整的、優化過的模板引擎,可以用于生成HTML等模板

          代碼格式和方法

          標記模板其實是合法的Groovy代碼。

          yieldUnescaped '<!DOCTYPE html>'

          html(lang:'en') {

          head {

          meta('http-equiv':'"Content-Type" content="text/html; charset=utf-8"')

          title('My page')

          }

          body {

          p('This is an example of HTML contents')

          }

          }

          常用的方法:

          yieldUnescaped方法會直接輸出給定的語句,不轉義其中的字符。

          yield方法和上面相反,會轉義特殊字符。

          head這些HTML標簽方法會生成對應的標簽。

          xmlDeclaration()方法會生成一個標準的XML文檔頭。

          comment方法生成HTML注釋。

          newLine生成一個新行。

          如何在spring boot中使用這個模板引擎呢?

          1. pom中添加依賴

          2.controller

          3.新建indexg.tpl,groovy模板頁面擴展名是tpl

          和平常所見到的頁面結構不太一樣,想要學習這個技術的可以直接訪問圖片中的鏈接,查看官方文檔學習。

          4.運行結果

          Mustache:mustache官方給出的是Logic-less templates.翻譯過來就是邏輯很少的模板,Mustcache可以被用于html文件,配置文件,源代碼等等很多場景,它的運行得益于擴展一些標簽在模板文件中,然后使用一個hash字典或者對象對其進行替換渲染。我們之所以稱之為“logic-less”是因為他摒棄了if else 以及for loop 這樣的語句,取而代之的是只有標簽,有些標簽被替換成一個值,或者不作為,或者是一系列的值,比如數組或者一個列表,標簽有幾種不同的類型,自接下來我們會逐個介紹,但是你要相信他非常簡單,因為他是“logic-less”的。(摘自wangwenjun69的csdn博客)

          這個模板我也不是很了解,就簡單介紹一下如何在spring boot中使用

          1. pom中引入依賴

          2.controller

          3.新建indexm.html

          4.訪問

          至此,spring boot中推薦的5種模板引擎就介紹完了,都是最簡單的應用,希望對入門的朋友有所幫助。


          主站蜘蛛池模板: 日本视频一区二区三区| 国产精品资源一区二区 | 麻豆一区二区在我观看| 国产精品亚洲专区一区| 无码精品人妻一区二区三区漫画 | 福利一区二区三区视频在线观看 | 免费无码A片一区二三区| 高清国产AV一区二区三区| 国产91精品一区二区麻豆亚洲| 性色AV一区二区三区无码| 亚洲一区二区三区在线| 日韩一区二区三区无码影院| 污污内射在线观看一区二区少妇 | 久久久国产精品无码一区二区三区| 国产在线不卡一区二区三区| 在线日韩麻豆一区| 久久精品无码一区二区三区免费| 奇米精品视频一区二区三区| 少妇无码一区二区二三区| 无码一区二区三区免费| 国产午夜精品免费一区二区三区 | 91福利国产在线观一区二区| 久久精品国产一区二区三| 一区二区三区视频在线| 精品无码人妻一区二区三区品| 老熟女五十路乱子交尾中出一区 | 久久久久久综合一区中文字幕| 中文字幕av无码一区二区三区电影| 国产福利电影一区二区三区,日韩伦理电影在线福 | 亚洲欧美日韩一区二区三区在线| 亚洲一区中文字幕久久| 另类一区二区三区| 亚洲综合一区二区精品导航| 精品人妻系列无码一区二区三区| 麻豆AV无码精品一区二区| 成人区人妻精品一区二区不卡| 日韩精品一区二区三区不卡| 中文字幕一区日韩在线视频| 亚洲一区中文字幕久久| 国产一区二区在线| 国产在线观看一区二区三区精品 |