leizongmin / js-xss

Sanitize untrusted HTML (to prevent XSS) with a configuration specified by a Whitelist
http://jsxss.com
Other
5.2k stars 629 forks source link

如何对单引号进行转义? #170

Open ztpark opened 5 years ago

ztpark commented 5 years ago

当输入框有单引号输入的时候,就会报错:“从客户端(ContentEN="...</p>'%3C/p%3E")中检测到有潜在危险的 Request.Form 值。” 按照双引号转义的方式一模一样写了一遍,无效,还是报错。请问正确写法应该怎么写? 下面是代码: ` // 正则表达式 var REGEXP_SINGLEQUOTE = /'/g; var REGEXP_SINGLEQUOTE_2 = /'/g;

    /**
     * 对单引号进行转义
     *
     * @param {String} str
     * @return {String} str
     */
    function escapeSingleQuote(str) {
        return str.replace(REGEXP_SINGLEQUOTE, "&apos;");
    }

    /**
     * 对单引号进行转义
     *
     * @param {String} str
     * @return {String} str
     */
    function unescapeSingleQuote(str) {
        return str.replace(REGEXP_SINGLEQUOTE_2, "'");
    }

    /**
     * 将标签的属性值转换成一般字符,便于分析
     *
     * @param {String} str
     * @return {String}
     */
    function friendlyAttrValue(str) {
        str = unescapeQuote(str);             // 双引号
        str = unescapeSingleQuote(str);             // 单引号            
        str = escapeHtmlEntities(str);         // 转换HTML实体编码
        str = escapeDangerHtml5Entities(str);  // 转换危险的HTML5新增实体编码
        str = clearNonPrintableCharacter(str); // 清除不可见字符
        return str;
    }

    /**
     * 转义用于输出的标签属性值
     *
     * @param {String} str
     * @return {String}
     */
    function escapeAttrValue(str) {
        str = escapeQuote(str);
        str = escapeSingleQuote(str);            
        str = escapeHtml(str);
        return str;
    }

    exports.escapeSingleQuote = escapeSingleQuote;
    exports.unescapeSingleQuote = unescapeSingleQuote;

`