xss csrf 捋之(2) some转义for抗xss

1.任何js runtime的解决方案

XML HTML字符实体

var keys = Object.keys || function(obj) {
    obj = Object(obj)
    var arr = []   
    for (var a in obj) arr.push(a)
    return arr
}
var invert = function(obj) {
    obj = Object(obj)
    var result = {}
    for (var a in obj) result[obj[a]] = a
    return result
}


var entityMap = {
    escape: {
      '&': '&',
      '<': '&lt;',
      '>': '&gt;',
      '"': '&quot;',
      "'": "&apos;"
    }
}
entityMap.unescape = invert(entityMap.escape)
var entityReg = {
    escape: RegExp('[' + keys(entityMap.escape).join('') + ']', 'g'),
    unescape: RegExp('(' + keys(entityMap.unescape).join('|') + ')', 'g')
}

// 将HTML转义为字符实体
function escape(html:string) {
    if (typeof html !== 'string') return ''
    return html.replace(entityReg.escape, function(match) {
        return entityMap.escape[match]
    })
}
// 将字符实体转回为HTML
function unescape(str:string) {
    if (typeof str !== 'string') return ''
    return str.replace(entityReg.unescape, function(match) {
        return entityMap.unescape[match]
    })   
}

2. 浏览器环境下利用dom API夹带私货的解决方案

// 将HTML转义为实体
function escape(html:string){
    var elem = document.createElement('div')
    var txt = document.createTextNode(html)
    elem.appendChild(txt)
    return elem.innerHTML;
}
// 将实体转回为HTML
function unescape(str:string) {
    var elem = document.createElement('div')
    elem.innerHTML = str
    return elem.innerText || elem.textContent
}

3. 加个获取textNode的正则,爬小说html过滤用

const exp2=/<(.|\n)*?>/g
const exp=/<[^<>]+>/gi

function filter(str) {
  return str.replace(exp,'')
}
最近的文章

Eloquent Ruby (Chapter 2) 手记

1. If, Unless, While, and Until基于unless的语句有2个好处: 第一, 它比if not要短。第二, 一旦你习惯用它, 你可以轻松的去理解它。前提是你需要熟悉它,如果不熟悉, 你就像穿错了鞋。 但是对于大多数的程序员来说, 已经习惯于unless。2. Use the Modifier Forms Where Appropriate你可以使用:@title = new_title unless @read_only也可以使用@title = new_t...…

继续阅读
更早的文章

xss csrf 捋之

XSS: 通过客户端脚本语言(最常见如:JavaScript)在一个论坛发帖中发布一段恶意的JavaScript代码就是脚本注入,如果这个代码内容有请求外部服务器,那么就叫做XSS!CSRF:又称XSRF,冒充用户发起请求(在用户不知情的情况下),完成一些违背用户意愿的请求(如恶意发帖,删帖,改密码,发邮件等)。 XSS与CSRF的区别,虽然这两个关键词时常抱团出现,但他们两个是不同维度的东西(或者说他们的目的是不一样的)。 XSS更偏向于方法论,CSRF更偏向于一种形式,只要是伪造用户...…

继续阅读