XSS攻击基础讲解及预防攻略

XSS侵略

XSS介绍

XSS侵略一般指的是经过运用网页开发时留下的缝隙,经过美妙的办法注入恶意指令代码到网页,运用户加载并实施侵略者恶意制造的网页程序。这后端开发工资一般多少些恶意网页程序一般是Jjavascript根底入门avaScript,但实践上也能够http署理包括Java、 VBScript、ActiveX、 Flash 或许乃至是一般的HTML。侵略成功后,侵略者或许得到包括但不限于更高的权限(如实施一些操作)、私密网页内容、会话和cookie等各种内容后端和前端有什么差异。(内容摘自百度百科)

xsjavascripts侵略类型可分为两种,反射型存储型,断章取义一种jsonp是保存进了数据库,另一种是在url中直接触发,没保存进数据库,下面一一介html是什么意思jhtml简略网页代码son字符串

反射型

url参数直接注入

场景阐明:在网站的查找框内json解析直接输入侵略脚本

// 查找框查找
http://localhjavascript数据类型ost/?keyWhtml代码ord=<html是什么意思script>alert(javascript根底入门111)</script>httpclient

存储型

存储到DB后读取时注入

场景阐明:侵略脚本作为留言内容,提交给后台保存,改写页面后端回来侵略脚本给前端

// 留言板刺进数据库
留言测验&ltjavascript根底入门json格局;sjavascript高档程序设计cript>alert(222)</script>//留后端言语言内容
  • HTML节点内容

侵略脚本经过接口存入数据json格局库中,当页面改写时后端收费,刺进的脚本替换页面HTML节点内容,脚本随即实施,引发缝隙侵略

<!-- content变量被侵略脚本替换 --&html文件怎样翻开gt;
<div>
{{content}}
&http 500lt;/div>
<div>
<schtml标签特点大全ript&gtjavascript根底入门;
</JSONscript>
</div&ghttp://192.168.1.1登录t;
  • HTML特征

经过修正或许增加HTML特征,触发侵略作业

&lhttpwatcht;!-- 图片地址异常后,引发差错作业后端开发需求学什么 -->
<img src="#{image}"/>
<img src=" 1"onhtml5error="alert(1http 500)" />
  • JavaScript代码

经过获取用户输入的变量或许其他保存的变量,在脚本中打印

<script&gthtt后端开发p:/json文件是干什么的/192.168.1.1登录;后端工程师是做什么的
varHTTP data = params;
console.log(data)
// 输入内容
params = "heJavaScriptllo":alhttp://192.json文件是干什么的168.1.1登录ert(1)
</s后端言语cript>
  • 富文本

富文本需求保httpwajson格局怎样翻开tch存HTMjsonp跨域原理L
HTML有XSS侵略危险

处理办法

整体思路:转义

  • HTML->HTML实体
  • js->Jjavascript数据类型SON_encode

转义时机:

  1. 存入数据库时转义
  2. 回来给前端时转义

转义办法更倾向于第一种:由于输入是一次性html文json数据件怎样翻开功用消费,而输出会是html屡次,构成功用糟蹋,本文的示例代码内容由于个人编译、演示便当原因是采用第二种办法-回来时后端转义,请各位读者知晓

H后端技能TML节点内容

处理思路:转义< &html5gt;,使之不能以html标签的办法保存jsonp跨域原理或许后端开发需求把握什么技能回来给前端

//转义函数
var escapeHtml = functjavascript菜鸟教程ion(str){
str =HTML str.replace(/</g,'&amp后端工程师是做什么的json解析;lt;');html是什么意思
str = s后端技能tr.replace(/>/g,'&gt;')
return str
}
// 转义前
<script>alert(111)</script>
// 转http://192.168.1.1登录移后
&lt;script&a后端收费mp;gt;html标签alert(111)&lhttp署理t;/script&amphttp 302;gt;
// 页面dom出现
<script>alert(111)javascript是干什么的</script>//字符串类型
||
<span><script>alert(11后端技能1)</script&后端开发薪酬一般多少gt;</span>

HTML特征

处理思路:转义"httpwatchhtml5,使标签内特后端收费征不能javascript菜鸟教程http://192.168.1.1登录自闭合,引起触发作业

// 转义函httpwatch
var escapeHtmlProperty = func后端技能tjsonpion(str){
if(!str)return '';
str = str.replace(/"/gjavascript什么意思,'&amp后端技能;quto;');//替换双引号
str = str.replace(html标签json解析/'/g,''');//替换单引号
str = str.replace(/ /g,' ');//替换空格html标签
return str;
}
// 转义前
<ihtml个人网页无缺代码mg src=" 1"http 500onerrjavascript根底入门后端开发薪酬一般多少or="alert(1)"后端和前端有什么差异 />
// 转义后
<img src="1&javascript高档程序设计quto; onerror=&quto;alert(1)" />
// 页面dhttp://192.168.1.1登录om出现
<img src="1&quto; onerror=&quto;alert(1)" />

那么JSON问题来了,转javascript义了HTML特征中的大于号、小于号,会对元素发生其他影响吗?转JSON义了HTML节点内容中的单引号、双引号、空格,会对元素JSON发生其他影响javascrhtml简略网页代码ipt面试题吗?
答案是不会发生影响的,读者能够自行验证javascript高档程序设计
此刻能够吞并上面的两个函数,整体处http 404HTML节点和特征,吞并函数如下:

// 转html标签特点大全义函数
var escapeHtml = fun后端技能ctio后端言语n(str){
str = str.replace(/&ampjson字符串;/g,'&amp;')后端收费;//&ahtml代码mp;符号也需求转义,但是必定放在第一个html是什么意思
str = str.html简略网页代码replace(/</g,'&ltjavascript是干什么的;');
str = str.replace(/&gt后端开发工资一般多少;/g,'&gt;')
str = str.replhtml个人网页完好代码ace(/json解析"/g,'&ahttpclientmp;quto;');/javascript/后端技能替换双引号
str = str.replahtml简略网页代码c后端和前端有后端破解系统什么差异e(/'/g,'https和http的差异'');//替换jsonp单引号
// 空格的转义影响其实并不大,能够省掉
// str = str.replace(/ /g,' ');//替换空格 
return str
}

JavajsonS后端cript代码

处理思路:转义双引号或许JSON_encode

//转义函数
var escapeForJs =function(str){
if(!str)return '';
st后端和前端有什么差异r = str.repl后端开发需肄业什么ace(/"/g,'"');//js中双引号的转义和HTML中不同,不能运用HTML转义办法
return str;
}
原函数:
<schttp署理ript>
var str = "!{keyWord}";
console.log(str)
</script>
//helhtml文件怎样翻开lojavascript根底入门 world";html个人网页完好代码alerjson文件是干什么的端言语t(1);"
/javascript高档程序设计json格局怎样翻开/html文件怎样翻开转义前
<script>
hello world
alert(1)json数据现已后端技能被弹javascript根底入门</script>
//转义后
hello world";alert(1);javascript数据类型"

但是这样就安全了吗html文件怎样翻开
答案必定不是!
单引号、scrijson格局怎样翻开pt标签、双引号、空格…都能够引发侵略,更为安全的办法-JSON_encode转义

JavaScript代码_Jhttp://192.168.1.1登录SOhtmlN_encodejson数据转义

JSON_encohtml简略网页代码de转义-JSON.stringify
演示代后端开发需求学什么码:

//json是什么意思 转义函数
JSON.stringify(参数)
//转义前
heljsonlo world";alert(1);"
//转义后
hellojavascript是干什么的 world";alert(1);"

富文本

处理思路:过滤

  1. 黑名单过滤

比方 schttp 500ript标签html标签特征大全onerror标签…悉数过滤掉

  • 利:结束简略-正则表达式就可处理
  • 弊:HTML标签过于凌乱,难免会留有缝后端开发需求学什么https和http的差异
  1. 白名单过滤

依照白名单过滤保存部分标签和特html是什么意思征,只容许保http协议存名javascript数据类型单内的标签、特征

  • 利:比较完全,只容许指定的标签、特征存在
  • 弊:结束起来相对费事,将HTML完全解析json格局怎样翻开成数JSON据结构,再对数据结构过滤,再组装成HTML

黑名单过滤:

示例侵略代码:

<!-- 或许输入html的侵略脚本 -->
<font color="red">这是赤色字</HTMLfont><scrijavascript是干什么的pt>后端开发需求把握什么技能alejson格局rt(html是什么意思'富文本')json文件是干什么的</script>
<a href="jjson字符串avascript后端开发:alert(1)">&lt后端开发薪酬一般多少;/a>
<img shtml文件怎样翻开rhttp://192.168.1.1登录c="abc" onerrhtml标签特征大全or="alert(1)">
..onfhttp 500ocus,
..onmounseover,
..onmenucontexjavascript什么意思t,
...
//过滤函数
var xssFiltHTTPerhtml标签特点大全 = function (后端html) {
if (!html)javascript根底入门 return '';
html = html.replace(json格局怎样翻开/&json字符串lt;s*/?scripts*>/g,'');
html = ht后端言语ml.replace(/javascript:[^'"]*/g,json数据'');
html = html.replhtml标签特征大全ace(/onerrors*=s*['"]?[^'"]*['"]?/g,javascript高档程序设计'');
...
return hjavascript什么意思tml
}

H后端言语TML中带有作业触发的都有或许成为侵略的突破口,面对javascript:void(0)这种状况,怎样防护呢?下面介绍白名单过滤。

白名单过滤:

处理思路:json解析json解析收拾富文本中后端开发悉数的标签特征,过滤只容许这些特征经过,其他特征则不容许经过
处理办法:后端和前端有什么差异将HTMHTMLL解析成树http协议状结构,和浏览器解析HTML进程类似,再去httpwatch遍历树json字符串状结构元素,在过滤范围内javascript什么意思的容许经过,没在过滤范围内的json文件是干什么的,则去掉

示例后端技能侵略代码:

//或许输入的侵略脚本
<font color="red">这是赤色字httpwatch</font><script>alhtml标签ert('富文本')</script>
<a href="javas后端收费cript:alert(1)"&httpclientgt;</a>
<im后端开发需求学什么g src="ajsonbc" onerror="http://www.baidu.comalert(1)"&JavaScriptgt;
..onfocus,
..onmounseoveJavaScriptr,
..onmenucontext,
...
//过滤代码javascript
var xssFilter = functi后端开发on (html)HTML {
if (!html) retjson是什么意思urn '';
//白名单 
vjavascrjson字符串ipt:void(0)ar whiteLhttp 302ist = {
'img': ['src'],
'font':['color','size'javascript是干什么的]后端,
'a':['href']
};
var cheerio = require('cheerio');
vaHTMLr $ = cheerio.load(html);
$('*').each(function (index, elem) {
if (!whiteList[elem.name]) {
$(elem).remove();
rjsonpeturn;
}
forjson数据 (var attr in elem.attribs) {json文件是干什么的
if (whiteList[elem.name].indexOf(attr) === -1) {
$javascrihtml5pt是干什么的(elem).attr(attr, null);
}
}
})后端
return $.html()
}

cheerio介绍

cheerio是为服务器特别定制的,快速、活络、实施的以javascript根底入门jQuery为中心结束的对DOM操作计javascript怎样读

//根底用法
const cheejavascript怎样读rio = require('ch后端工程师是做什么的eerio');
const $ = cheerio.lojavascript高档程序设计ad('<h2 class="title">Hello world</h2&gjavascript:void(0)t;');
$jsonp跨域原理('h2.title').text('Heljavascript数据类型lo there!');
$('h2').html5addClass('welcome');
$.html();
//=&ghtml简略网页代码t; <html><hehttpwatchad后端收费>json解析</head><body><h2 classjavascript怎样读="title welcome">Hello thehttp署理re!</html5h2></body>&javascript是干什么的lt;/html>javascript:void(0)

安装办法、语html个人网页完好代码法等此处不过多介绍,需求的读者请跳html是什么意思转官网阅览
代码中首要运用它把HTMLhttp://www.baidu.com构转换成可直接运用的数据结构,json格局怎样翻开再循环去比较、移除。
那有没有现有的可直接运用的第三方结构吗?答HTTPjson文件是干什么的案是必定的

js-XSS

xss是一个用于对用户输入的内容进行过滤,以避javascript什么意思免遭受 XSS 侵略的模块。首要用于json论坛、博客、网上商店等后端工程师是做什么的等一些可容许用户录入页面排版、格局操控相关的 HTML 的场景,xss模块经过白名单来操控容许的json格局怎样翻开标签及相关的标签特征,其他还javascript怎样读供给了一系列的接口以便用户http 500扩展,比其他同类模块更为活络中文官网地址
示例代码:

//过滤函数
var xssFilter = function (html)http 404 {
if (!html) return '';
var xshttp://www.baidu.coms = rjsonpequire('xss');
var re后端破解系统t = xss(html);json解析
return ret;
}

便是如此的简略后端技能,当然还需javascript求调整,此处就不过多介绍了,下面介绍下xss模块的特html标签性及底子运用办法。

特性json是什么意思

  • json是什么意思名单操控容许的 HTML 标签及各标签的特征
  • 经过自定义处理http://192.168.1.1登录函数,可对任意标签及其特征进行处理

运用办法:

Node.html文件怎样翻开js中运用

v后端ar xss = req后端收费uire("xss");
var html = xss('<script>alert("xs后端和前后端端有什么差异s");</script>');
console.log(html);

在浏览器端运用javascript怎样读

<script srhttp://www.baidu.comc="https://rajson字符串wgit.com/leizongmin/js-xjson字符串ss/master/dist后端/xss.j后端开发需肄业什么s"></scri后端开发薪酬一般多少pt>
<shtml标签特点大全cript&html标签gt;
// 运用函数名 filterXSS,用法相同
var html =json解析 filterXSS('<scrhtml是什么意思i后端破解系统pt>alert("xs后端开发s");</scr' + 'ijsonp跨域原理pt>');
alert(ht后端开发薪酬一般多少ml);html5
</script>

其他运用办法及用法请参看官网事例

假设json需求简略、快速、安全的开发选用第三方的库当然更好,但是运用进程或许会有这样或许那样的问题,达不到业务的要求等等,相较于第三方的库自HTTP己设置白名单去处理的话,就更简略操控、定制化作用明显https和http的差异,相对问题或许会更少,仁http署理者见仁智者见智,读者依据实践状况可自行选后端收费择。

CSPjavascrihtml5网页制造pt高档程序设计

内容安全策略 (javascript面试题CSP) 是一个额定的http://192.168.1.1登录安全层,用于检测并削弱某些特定类型的侵略,包括跨站脚本 (XSS) 和数据注入侵略等。无论是数据盗取、网站内容json格局怎样翻开污染仍是发出恶意软javascript根底入门件,这些侵略都是首要的办法。

  • Content Security Policy
  • 内容安全策略
  • 用于指定那些内容可实施

运用办法:

装备内https和http的差异容安全策略涉及到增加 Content-Security-Policy HTTP头json格局部到一个页面,并装备相应的值,以操控用户署理(浏览html5网页制造器等)能够为该页面获取哪些资源。

常见用例:

示例1ja后端开发vascript菜鸟教程

一个网站管理者想要悉数内容均来自站点的同一个源 (不包括其子域名)

Content-Security-Polhtml简略网页代码icy: default-src 'sel后端技能f'

示例2

一个在线邮箱的管理者想要容许在邮件里包括HTML,相同图片容许从任何地方加载,但不容许JavaScrjavascript怎样读ipt或许其他潜在的危险内容(从任意方位加载html是什么意思)。

Content-Sechtml代码urity-Policy: default-src 'self' *.mailsite.com; ijson解析mg-srhtml5c *

更多示例及用HTTP法请参看后端开发需求把握什么技能MDN-CSP

结语

安全作为系统的壁垒,重要程度不用多说。
XSS侵略更是安全jsohttp协议n防护的重中之中jsonp跨域原理
本文记录的是笔jsonp跨域原理者在开发进程中遇到的问题及json字符串处理的思路。可供jjavascript:void(0)avascript有类似问题的读者参看。
其他安全方面的文章笔者会持续更新,欢迎各位读http 404者提出json是什么意思定见和https和http的差异建议。