Daw*_*wid 13 javascript security
我想要做的是强制一些任意的JavaScript代码在DOM元素"内部"执行,例如<div>
.换句话说,是否有可能使一段代码"思考" <div>
作为文档层次结构(或<body>
文档)的根源?
真人生活的例子:
假设我们有一个允许执行JavaScript代码的页面:
<!DOCTYPE html>
<html>
<head>
<title>Executor</title>
<script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<div></div>
<input/>
<button onclick="$('div').html(eval($('input').val()))">
Execute
</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
代码可以访问整个文档并可以修改它,例如:
$("input").hide()
Run Code Online (Sandbox Code Playgroud)
会阻止我再编写任何愚蠢的代码;-)
是否可以限制某些JavaScript代码的效果区域?以及如果可能的话怎么做?
最好的祝福.
编辑:
我想要执行的代码可能就是一切.如果您的解决方案基于对给定代码的某种修改,请描述如何以正确的方式执行此操作.
EDIT2:
首先,我不知道为什么我会投票.
其次,我将执行的代码是别人的任意代码,而不是我的代码.
为了使一切清楚:
我真正想做的是以某种方式模拟浏览器.获取某些网页的内容,并插入我的网页.当我们决定关闭JavaScript并删除可能出现的所有地方时,这相对容易,但这是我不能做的事情.现在我想限制DOM修改(恶意代码).当我有一个基本想法时,我将在稍后处理重定向和cookie.
dth*_*rpe 16
实现完整隔离和封装大量代码的最佳方法是将其放入iframe,并将其放在站点的子域中,以便外部HTML页面的域名与内部HTML页面不同.在iframe中,JavaScript只会看到iframe URL的DOM,并且无法访问外部DOM.这种隔离由浏览器安全模型强制执行.
这种技术的优点是,您可以高度确信在iframe内运行的脚本不会泄漏并从外部页面窃取数据.这种隔离也是缺点 - 在外页和内页之间共享数据更加困难.要在iframe和外部页面之间提供受控访问或共享数据,您可以调查各种跨域数据共享技术.如果您只需要在iframe内部页面上"抛出"参数,则可以将URL上的数据作为查询参数传递.如果您需要双向数据交换,您可以使用域名降低技术简化域名,以便浏览器允许外页和内页之间的数据交换.
由于您提议在输入控件中输入eval()任意代码,因此您绝对应该保护主页逻辑免受潜在的hackery.使用iframe.
一种方法可以使用匿名函数封装所有需要保护的代码,并使用类似对象传递所有环境参数,但修改为不允许全局DOM操作,最简单的示例
(function(document,JQuery,$,window){ //make sure all global access methods are here
//eval code here or just copy and paste
})(modifiedDocument,modifiedJQuery,modifiedJQuery,modifiedWindow);
Run Code Online (Sandbox Code Playgroud)
现在问题可能会出现在我们的脑海中,我们如何修改文档对象?也许是一种方法
var modifiedDocument = function(){
this.getElementById = function(id){ //one of global accessing functions
//check if given id is withing the restriction div
return document.getElementById(id);
//if found element is not withing restriction div just return null or what is default
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
自调用匿名函数允许我们防止全局变量冲突,并且它被用在许多众所周知的库中,例如jQuery.
为了能够应用此方法,首先必须确定每种可能的方式,脚本如何尝试读取或写入全局DOM对象.我不能给你完整的解决方案,因为使用这种方法显然一个项目可能会消耗我整个星期,但这可能会照亮你的方式!
归档时间: |
|
查看次数: |
921 次 |
最近记录: |