在使用Devise进行身份验证后,我发现存在一个安全漏洞,在用户注销后,会话变量被保留.这允许任何人按下后退按钮并访问登录用户的上一屏幕.
我将这些行添加到application_controller中
before_filter :set_no_cache
def set_no_cache
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end
Run Code Online (Sandbox Code Playgroud)
在_form.html.erb中,我在顶部添加了这个
<%if user_signed_in? %>
<%=link_to "Sign Out", destroy_user_session_path, :method => :delete %><br/>
<%= form_for(@listing) do |f| %>
<% if @listing.errors.any? %>
...........
Run Code Online (Sandbox Code Playgroud)
然后我在Firefox,Chrome和Safari上测试了该应用程序.
Firefox和Chrome很好,因为我退出并点击了后退按钮,无法看到用户的上一个屏幕,但是,在Safari和Opera中,不安全的行为仍然存在.此代码没有效果.
对于如何解决这个问题,有任何的建议吗?
谢谢
我做了一个简单的函数,使所有容器的行为像链接("a"元素).
function allHot(element){
$(element)
.click(
function(){
var href = $(this).find('a').attr('href');
window.location.replace(href);
})
.hover(
function(){
$(this).css({'text-shadow' : '0px 1px 0px #D6D6D6'});
},
function(){
$(this).css({'text-shadow' : 'none'});
}
);
}
Run Code Online (Sandbox Code Playgroud)
功能很棒.用户可以单击容器上的任何位置并正确重定向,而不是单击"更多"按钮.
但是,如果用户在重定向后点击后退按钮,则浏览器会返回两步而不是一步.更奇怪的是,历史看起来还不错.
简单方案以更好地描述:
第1页 - >第2页
Page2 [用户点击"allHot"容器] - > allHot重定向到Page3
Page3 [用户点击浏览器后退按钮] - > Page1
这是我正在努力的网站的主要错误.我真的没有预防它的线索.在Firefox,Chrome和Opera上测试了Bug.
也测试了Opera"没有javascript模式".如果禁用了javascript,则不会发生问题.
提前感谢任何线索或解决方案.
我一直试图申请user-selectOpera 10.62和IE9但没有成功.我不能/不会用JavaScript绑定事件preventDefault(),因为有很多地方要设置不可选,我仍然需要在几个地方保留选择.实际上,我希望整个文档的默认行为是不可选择的,至于我在样式表中设置了以下内容:
* {
-o-user-select: none;
-webkit-user-select: none;
-moz-user-select: -moz-none;
-khtml-user-select: none;
-ms-user-select: none;
user-select: none;
}
Run Code Online (Sandbox Code Playgroud)
Firefox 4,Chrome 7和Safari 5的一切都运行良好.只有IE9和Opera 10.62无法正常工作.有任何想法吗?
PS:我的目标是现代浏览器.
有没有人尝试使用过
$(“html, body”).animate({scrollTop:0}, 'slow');
Run Code Online (Sandbox Code Playgroud)
在Opera浏览器上?
它会产生一种奇怪的效果,特别是如果你在一个长页面上滚动,它似乎首先到达顶部,然后向下滚动到正确的点.这是一种奇怪的令人不安的影响......
有没有解决方法来解决它?谢谢
window.resize不能用于chrome和opera ..如何使它工作?

链接到这个图片:img
Firefox按原样显示此图像.
但是,如果我用Opera Gray打开它,颜色会有所不同,如果我下载并用任何编辑器打开.为什么?
歌剧是如何向我展示我的形象的:

这是真实的图像颜色:

更多图片(只是想知道)

如何让我的png在所有浏览器中显示原生.(与FireFox或IE或Windows图片浏览器一样)
今天进入这个怪癖.
您会注意到在Firefox 7和Opera中,灰色框中包含单词"Next".CSS包含一个text-indent属性,该属性应该将该文本移动到其容器之外.在IE或Chrome中查看此页面会以应有的方式显示该页面.至少你认为它应该显示的方式.
这是一个已知的错误?有解决方法吗?
在重载我的机器之前,我想看看我可以设置多少同步SSE(也称为EventSource)连接.但是使用Firefox(Firefox 18或Firefox 20)测试它在6个连接处停止:附加连接没有错误,但不发送任何数据.(在Firebug中,我可以在那里看到它们,等待连接.)Chromium 25也在6个连接处停止,Opera 12.15也是如此.但它似乎不是服务器端限制(我使用Apache + PHP),因为我可以同时运行所有三个浏览器(即18个连接),并且所有都来自相同的IP地址.(服务器和客户端位于同一台计算机上,但使用的是172.16.xx地址,而不是127.0.0.1.)
所以,我用CORS设置测试,并尝试连接到另一台具有全局IP的服务器.这次我获得了12个Firefox连接.建议它毕竟是Apache配置?不,Opera仍然只有6个连接.(Chrome没有号码,因为CORS似乎不起作用.)我也可以连接两台服务器,在Firefox中共有18个连接(但从不再连接),在Opera中共有12个连接.
作为第三个测试,我将后端和html移动到远程服务器,并以这种方式加载页面.这次我达到了Firefox的10个连接限制!?!Opera仍然有6的限制.而Chromium(由于这次没有涉及CORS,因此有效)限制为6.
我很欣赏任何关于这个数字6来自哪里的见解,以及所有三个浏览器是否相同的巧合.特别是任何洞察Firefox为何有时为6,有时为10,有时为12.(SSE规范似乎未定义最大连接数.)
Apache配置是使用prefork,这意味着这些设置:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
Run Code Online (Sandbox Code Playgroud)
(本地(Ubuntu 10.04)和全局(Ubuntu 11.10)服务器在这里具有相同的Apache设置.)我认为关键数字是MaxClients是150.我做了一个快速实验,将StartServers更改为50而不是5,但是相同结果.
这是客户端HTML/javascript(1或2行取消注释,如果你想实验连接到不同的服务器那么修改;如这里给出的,它希望在与HTML相同的目录中找到sse.php):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>SSE Stresstest</title>
</head>
<body>
<p id="err"></p>
<p id="x"></p>
<script>
function start(){
function onMessage(e){
document.getElementById('x').innerHTML+=e.origin+":"+this.dummy_n+":"+e.data+"<br/>";
};
function onError(e){
document.getElementById('err').innerHTML+="ERR:"+this.dummy_n+":"+JSON.stringify(e)+"<br/>";
};
for(var n=1;n<=32;++n){
//NB. 't' primarily to avoid caching
var url='sse.php?dummy_n='+n+'&t='+(new Date().getTime());
//if(n%2==0)
// url='http://example.com/sse.php?dummy_n='+n+'&t='+(new Date().getTime());
var es=new EventSource(url);
es.dummy_n=n; //So we can identify each one
es.addEventListener('error',onError,false);
es.addEventListener('message',onMessage,false); …Run Code Online (Sandbox Code Playgroud) 我想在Opera上运行我的Selenium WebDriver测试,但是当我在Selenium HQ和GitHub页面上查看Opera驱动程序时,它说:
Opera Driver需要Opera 12.x及更早版本
请注意,OperaDriver仅在12.16之前与基于Presto的Operas兼容.不支持基于闪烁的歌剧(15及以上).
Opera现在达到了22.0版本,远远超出了12的最大支持版本.所以,我的问题是: -
但我有另一个(较小的)问题.我正在使用Firefox 3.5和Safari 4(在Mac上),当我在XHTML中嵌入SVG时,我根本没有相同的结果.
我可以使用<object>或<embedded>元素(但我认为最后一个被弃用).我这样使用它们:
<div id="map_canvas" style="width: 900px; height: 900px">
<object data="test.svg" width="100%" height="100%" type="image/svg+xml"/>
</div>
Run Code Online (Sandbox Code Playgroud)
并且SVG的大小和规模与Firefox和Safari不同.在我的SVG中width,height和,viewBox都被定义了.
有没有办法在所有浏览器中获得相同的结果(我不关心不支持SVG的IE ...所以"所有浏览器"至少意味着最新版本的Firefox,Opera和Safari) ?? 也许我忘了定义的东西?
编辑:我也注意到,使用<object>,SVG是透明的FF,但不透明的Safari ... :(是否有"标准"的方式来包含SVG?
谢谢您的帮助