首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

實作 HTMLEncode 功能的 JavaBean 組件

     編輯:J2EE

原始碼完整實作

package loveJSP;

public class encodeHtml {
    private String html = "no input Html";

    public String getHtml() {
        return HTMLEncode(html);
    }

    public void setHtml(String html) {
        this.html = html;
    }

    private static String HTMLEncode(String text) {
        if (text == null) return "";
        StringBuffer results = null;
        char[] orig = text.toCharArray();
        int beg = 0, len = text.length();

        for (int i = 0; i < len; i++) {
            char c = orig[i];
            // 需編碼的特殊字元
            if (c == '&' || c == '<' || c == '>' || c == '\"') {
                if (results == null) results = new StringBuffer(len + 20);
                results.append(orig, beg, i - beg);
                beg = i + 1;
                switch (c) {
                    case '&': results.append("&amp;"); break;
                    case '<': results.append("&lt;"); break;
                    case '>': results.append("&gt;"); break;
                    case '\"': results.append("&quot;"); break;
                }
            }
        }
        if (results == null) return text;
        results.append(orig, beg, len - beg);
        return results.toString();
    }
}

程式碼說明與修正重點

  • 原始碼有語法錯誤(char c="text.charAt(i);"、0: ?&?: ?beg) 等),已修正為可編譯版本。
  • 使用 StringBuffer 高效拼接,僅在遇到特殊字元時建立緩衝區。
  • 編碼對象:&→&amp;、<→&lt;、>→&gt;、"→&quot;。
  • 符合 JavaBeans 規範:private 欄位 + public Getter/Setter、無參建構子(隱式)。
  • JSP 使用範例:
    <jsp:useBean id="encoder" class="loveJSP.encodeHtml" scope="page" />
    <jsp:setProperty name="encoder" property="html" value="<script>alert('xss')</script>" />
    <%= encoder.getHtml() %>
    
    輸出:&lt;script&gt;alert(&quot;xss&quot;)&lt;/script&gt;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved