team icon indicating copy to clipboard operation
team copied to clipboard

富文本安全前端防御问题

Open MayOMengxuhui opened this issue 6 years ago • 0 comments

富文本安全前端防御问题

  • XSS攻击全名(Cross-Site-Script)跨域脚本攻击,为了跟CSS(Cascading-Style-Sheet)区分开来,所以缩写是XSS。

常见 XSS 遇到的攻击方法

  • 普通的XSS JavaScript注入
<script src=http://3w.org/XSS/xss.js></script>
  • IMG标签XSS使用JavaScript命令
<img scr=1 onerror=alert('xss')>
  • IMG标签无分号无引号
<img src=x onerror=appendChild(createElement('script')).src='js_url' />
<img src=javascript:alert('XSS')>
  • 嵌入式标签,将Javascript分开
<img src="jav ascript:alert('XSS');">
  • 双开括号
<<script>alert("XSS");//<</script>
  • iframe | frame
<iframe src="javascript:alert('XSS');"></iframe>
<frameset><frame SRC="javascript:alert('XSS');"></frameset>
  • 超链接
<a href=javascrip:alert('xss')>s</a>

XSS攻击防御的手段

  • 因为XSS的根本就是向网站插入脚本代码,并使它运行的一种手段。防御方法分为两种,服务端防御和客户端防御。

服务端防御:

  1. HttpOnly   可以限制javascript不能读取cookie,防止会话ID泄露
  2. 处理富文本   过滤掉富文本中的敏感标签如(script、iframe、form、img),还有敏感词(javascript:) 等等

客户端防御:

  1. 输入检查   防止输入敏感字段,如javascript、cookie等等
  2. 检查输出   脚本都是通过混淆在HTML当中,被当成html代码的一部分才得到执行。 可以通过编码转义的办法,使得混淆在其中的脚本被当成文本处理,不会被执行。 编码转义的话,有三种方法:
  • 将能被转换为html的输入内容,在写代码时改为innerText而不用innerHTML

  • 实在没有办法的情况下可用如下方法(js代码)

function safeStr(str){
return str.replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g, "&quot;").replace(/'/g, "&#039;");
}
  • URL Encode* 使用URLEncode的方法。

略懂中常被攻击的场景

  • 用户手动输入用户名导致注入

  • 富文本中发布文章、提问、投票、PK等

(1)构造了下昵称,可以把页面层级弄乱

f237013be443b34e662fe3b4e000a908

参考 : 更多xss实例

MayOMengxuhui avatar May 30 '18 09:05 MayOMengxuhui