我想具体了解下跨仙域攻击击

$_POST安全, 如何避免跨域提交?
[问题点数:40分,结帖人mumubangditu]
$_POST安全, 如何避免跨域提交?
[问题点数:40分,结帖人mumubangditu]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2012年3月 PHP大版内专家分月排行榜第二2011年12月 PHP大版内专家分月排行榜第二2011年10月 PHP大版内专家分月排行榜第二
2013年2月 PHP大版内专家分月排行榜第三2012年9月 PHP大版内专家分月排行榜第三2012年7月 PHP大版内专家分月排行榜第三2012年5月 PHP大版内专家分月排行榜第三
2013年1月 PHP大版内专家分月排行榜第三2012年12月 PHP大版内专家分月排行榜第三
2013年5月 总版技术专家分月排行榜第一
2014年8月 总版技术专家分月排行榜第二2014年7月 总版技术专家分月排行榜第二2013年6月 总版技术专家分月排行榜第二
2013年9月 其他开发语言大版内专家分月排行榜第二2013年8月 其他开发语言大版内专家分月排行榜第二2013年7月 其他开发语言大版内专家分月排行榜第二2011年4月 PHP大版内专家分月排行榜第二
2013年10月 PHP大版内专家分月排行榜第三2013年5月 PHP大版内专家分月排行榜第三2013年4月 其他开发语言大版内专家分月排行榜第三2013年4月 PHP大版内专家分月排行榜第三2013年3月 其他开发语言大版内专家分月排行榜第三2011年5月 PHP大版内专家分月排行榜第三
2013年9月 其他开发语言大版内专家分月排行榜第二2013年8月 其他开发语言大版内专家分月排行榜第二2013年7月 其他开发语言大版内专家分月排行榜第二2011年4月 PHP大版内专家分月排行榜第二
2013年10月 PHP大版内专家分月排行榜第三2013年5月 PHP大版内专家分月排行榜第三2013年4月 其他开发语言大版内专家分月排行榜第三2013年4月 PHP大版内专家分月排行榜第三2013年3月 其他开发语言大版内专家分月排行榜第三2011年5月 PHP大版内专家分月排行榜第三
2013年5月 总版技术专家分月排行榜第一
2014年8月 总版技术专家分月排行榜第二2014年7月 总版技术专家分月排行榜第二2013年6月 总版技术专家分月排行榜第二
2012年3月 PHP大版内专家分月排行榜第二2011年12月 PHP大版内专家分月排行榜第二2011年10月 PHP大版内专家分月排行榜第二
2013年2月 PHP大版内专家分月排行榜第三2012年9月 PHP大版内专家分月排行榜第三2012年7月 PHP大版内专家分月排行榜第三2012年5月 PHP大版内专家分月排行榜第三
2013年1月 PHP大版内专家分月排行榜第三2012年12月 PHP大版内专家分月排行榜第三
2013年4月 Web 开发大版内专家分月排行榜第三
2013年4月 Web 开发大版内专家分月排行榜第三
2013年9月 其他开发语言大版内专家分月排行榜第二2013年8月 其他开发语言大版内专家分月排行榜第二2013年7月 其他开发语言大版内专家分月排行榜第二2011年4月 PHP大版内专家分月排行榜第二
2013年10月 PHP大版内专家分月排行榜第三2013年5月 PHP大版内专家分月排行榜第三2013年4月 其他开发语言大版内专家分月排行榜第三2013年4月 PHP大版内专家分月排行榜第三2013年3月 其他开发语言大版内专家分月排行榜第三2011年5月 PHP大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。本文来自网络(http://f2e.me/200904/cross-scripting/,该网址已不能访问),仅作个人读书笔记之用,并稍作修改和补充。
什么是跨域
JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。这里把涉及到跨域的一些问题简单地整理一下:
首先什么是跨域,简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是域名下的对象。更详细的说明可以看下表:
是否允许通信
同一域名下
/script/b.js
同一域名下不同文件夹
:8000/a.js
同一域名,不同端口
同一域名,不同协议
http://70.32.92.74/b.js
域名和域名对应ip
主域相同,子域不同
http://a.com/b.js
同一域名,不同二级域名(同上)
不允许(cookie这种情况下也不允许访问)
特别注意两点:
第一,如果是协议和端口造成的跨域问题&前台&是无能为力的,
第二:在跨域问题上,域仅仅是通过&URL的首部&来识别而不会去尝试判断相同的ip地址对应着两个域或两个域是否在同一个ip上。&URL的首部&指window.location.protocol +window.location.host,也可以理解为&Domains, protocols and ports must match&。
接下来简单地总结一下在&前台&一般处理跨域的办法,后台proxy这种方案牵涉到后台配置,这里就不阐述了,有兴趣的可以看看yahoo的这篇文章:《》
1、document.domain+iframe的设置
对于主域相同而子域不同的例子,可以通过设置document.domain的办法来解决。具体的做法是可以在/a.html和/b.html两个文件中分别加上document.domain = &&;然后通过a.html文件中创建一个iframe,去控制iframe的contentDocument,这样两个js文件之间就可以&交互&了。当然这种办法只能解决主域相同而二级域名不同的情况,如果你异想天开的把的domian设为那显然是会报错地!代码如下:
上的a.html
document.domain = 'a.com';
var ifr = document.createElement('iframe');
ifr.src = '/b.html';
ifr.style.display = 'none';
document.body.appendChild(ifr);
ifr.onload = function(){
var doc = ifr.contentDocument || ifr.contentWindow.
// 在这里操纵b.html
alert(doc.getElementsByTagName("h1")[0].childNodes[0].nodeValue);
上的b.html
document.domain = 'a.com';
这种方式适用于{, , , }中的任何页面相互通信。
备注:某一页面的domain默认等于window.location.hostname。主域名是不带www的域名,例如a.com,主域名前面带前缀的通常都为二级域名或多级域名,例如其实是二级域名。
domain只能设置为主域名,不可以在中将domain设置为。
1、安全性,当一个站点()被攻击后,另一个站点()会引起安全漏洞。
2、如果一个页面中引入多个iframe,要想能够操作所有iframe,必须都得设置相同domain。
2、动态创建script
虽然浏览器默认禁止了跨域访问,但并不禁止在页面中引用其他域的JS文件,并可以自由执行引入的JS文件中的function(包括操作cookie、Dom等等)。根据这一点,可以方便地通过创建script节点的方法来实现完全跨域的通信。具体的做法可以参考YUI的
这里判断script节点加载完毕还是蛮有意思的:ie只能通过script的readystatechange属性,其它浏览器是script的load事件。以下是部分判断script加载完毕的方法。
js.onload = js.onreadystatechange = function() {
if (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete') {
// callback在此处执行
js.onload = js.onreadystatechange =
3、利用iframe和location.hash
这个办法比较绕,但是可以解决完全跨域情况下的脚步置换问题。原理是利用location.hash来进行传值。在url: http://a.com#helloword中的&#helloworld&就是location.hash,改变hash并不会导致页面刷新,所以可以利用hash值来进行数据传递,当然数据容量是有限的。假设域名a.com下的文件cs1.html要和域名下的cs2.html传递信息,cs1.html首先创建自动创建一个隐藏的iframe,iframe的src指向域名下的cs2.html页面,这时的hash值可以做参数传递用。cs2.html响应请求后再将通过修改cs1.html的hash值来传递数据(由于两个页面不在同一个域下IE、Chrome不允许修改parent.location.hash的值,所以要借助于a.com域名下的一个代理iframe;Firefox可以修改)。同时在cs1.html上加一个定时器,隔一段时间来判断location.hash的值有没有变化,一点有变化则获取获取hash值。代码如下:
先是a.com下的文件cs1.html文件:
function startRequest(){
var ifr = document.createElement('iframe');
ifr.style.display = 'none';
ifr.src = '/lab/cscript/cs2.html#paramdo';
document.body.appendChild(ifr);
function checkHash() {
var data = location.hash ? location.hash.substring(1) : '';
if (console.log) {
console.log('Now the data is '+data);
} catch(e) {};
setInterval(checkHash, 2000);
<域名下的cs2.html:
//模拟一个简单的参数处理操作
switch(location.hash){
case '#paramdo':
callBack();
case '#paramset':
//do something&&
function callBack(){
parent.location.hash = 'somedata';
} catch (e) {
// ie、chrome的安全机制无法修改parent.location.hash,
// 所以要利用一个中间的cnblogs域下的代理iframe
var ifrproxy = document.createElement('iframe');
ifrproxy.style.display = 'none';
ifrproxy.src = 'http://a.com/test/cscript/cs3.html#somedata';
// 注意该文件在"a.com"域下
document.body.appendChild(ifrproxy);
<下的域名cs3.html
//因为parent.parent和自身属于同一个域,所以可以改变其location.hash的值
parent.parent.location.hash = self.location.hash.substring(1);
当然这样做也存在很多缺点,诸如数据直接暴露在了url中,数据容量和类型都有限等&&
4、window.name实现的跨域数据传输
文章较长列在此处不便于阅读,详细请看&。
5、使用HTML5 postMessage
中最酷的新功能之一就是 。下一代浏览器都将支持这个功能:Chrome 2.0+、Internet Explorer 8.0+, Firefox 3.0+, Opera 9.6+, 和 Safari 4.0+ 。 Facebook已经使用了这个功能,用postMessage支持基于web的实时消息传递。
otherWindow.postMessage(message, targetOrigin);
otherWindow:
对接收信息页面的window的引用。可以是页面中iframe的contentWindow属性;的返回值;通过name或下标从取到的值。
所要发送的数据,string类型。
targetOrigin:
用于限制otherWindow,&*&表示不作限制
</index.html中的代码:
&iframe id="ifr" src="b.com/index.html"&&/iframe&
&script type="text/javascript"&
window.onload = function() {
var ifr = document.getElementById('ifr');
var targetOrigin = 'http://b.com';
// 若写成'http://b.com/c/proxy.html'效果一样
// 若写成'http://c.com'就不会执行postMessage了
ifr.contentWindow.postMessage('I was there!', targetOrigin);
</index.html中的代码:
&script type="text/javascript"&
window.addEventListener('message', function(event){
// 通过origin属性判断消息来源地址
if (event.origin == 'http://a.com') {
alert(event.data);
// 弹出"I was there!"
alert(event.source);
// 对a.com、index.html中window对象的引用
// 但由于同源策略,这里event.source不可以访问window对象
}, false);
参考文章:、
6、利用flash
这是从YUI3的IO组件中看到的办法,具体可见。可以看在Adobe Developer Connection看到更多的跨域代理文件规范:、。
阅读(...) 评论()收藏,215 浏览
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
前几天自己的网站莫名的出错,查看了一下出错的位置,发现是自己的某个JS文件被篡改了,篡改后的JS在调用完我原来的JS后直接生成script标签跨域链接到他的JS上。
对于网站安全问题这块不甚了解,网站是通过动转静服务将动态页面转换成静态页面后部署到CDN上的,页面也没有任何post操作,那么他们是通过哪些可能的路径篡改的本地JS呢?
希望SF大神们帮忙看看
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
起码得发个网站链接之类的吧,只是这么说谁知道啊。。
欢迎来到最专业的开发者社区
终于被你注意到了 ^_^,如果你觉得这个社区还不错,记得了加入我们哦
最专业的开发者社区
最前沿的技术问答,最纯粹的技术切磋。让你不知不觉中开拓眼界,提高技能,认识更多朋友。
分享到微博?
删除理由:
删除理由:
忽略理由:
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
内容质量差,或不适合在本网站出现
其他原因(请补充说明)
补充说明:
举报理由:
带有人身攻击、辱骂、仇恨等违反条款的内容
与已有问题重复
内容质量差,或不适合在本网站出现
答非所问,不符合答题要求
其他原因(请补充说明)
补充说明:思路: 判断referer里的地址是否和当前的地址一致,如果不一致则说明是跨域攻击的,否则不是
* 验证请求的合法性,防止跨域攻击
* @param request
@SuppressWarnings(&rawtypes&)
publicstatic boolean validateRequest(HttpServletRequest request) {
String referer = &&;
booleanreferer_sign =// true 站内提交,验证通过 //false 站外提交,验证失败
Enumeration headerValues = request.getHeaders(&referer&);
while(headerValues.hasMoreElements()) {
referer = (String) headerValues.nextElement();
// 判断是否存在请求页面
if(StringUtils.isBlank(referer)) referer_sign =
// 判断请求页面和getRequestURI是否相同
String servername_str = request.getServerName();
if(StringUtils.isNotBlank(servername_str)) {
intindex = 0;
if(StringUtils.indexOf(referer, &https://&) == 0) {
index = 8;
elseif (StringUtils.indexOf(referer, &http://&) == 0) {
index = 7;
if(referer.length() - index & servername_str.length()) {// 长度不够
referer_sign =
else{ // 比较字符串(主机名称)是否相同
String referer_str = referer.substring(index, index + servername_str.length());
if(!servername_str.equalsIgnoreCase(referer_str)) referer_sign =
elsereferer_sign =
returnreferer_
原文地址:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:322811次
积分:4877
积分:4877
排名:第1916名
原创:200篇
转载:31篇
评论:93条
(1)(1)(2)(15)(8)(2)(5)(14)(1)(5)(3)(4)(6)(1)(3)(3)(1)(1)(5)(1)(8)(9)(9)(8)(4)(1)(23)(64)(25)

我要回帖

更多关于 jquery 跨域 的文章

 

随机推荐