我之前曾问过一个关于这个问题的问题,但它没有得到正确的答案而且无处可去.
所以我已经澄清了关于这个问题的一些细节,我真的很想听听你如何解决这个问题或者我应该尝试什么的想法.
我在我的Linux服务器上安装了Java 1.6.0.12,下面的代码运行得非常完美.
String key = "av45k1pfb024xa3bl359vsb4esortvks74sksr5oy4s5serondry84jsrryuhsr5ys49y5seri5shrdliheuirdygliurguiy5ru";
try {
Cipher c = Cipher.getInstance("ARCFOUR");
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "ARCFOUR");
c.init(Cipher.DECRYPT_MODE, secretKeySpec);
return new String(c.doFinal(Hex.decodeHex(data.toCharArray())), "UTF-8");
} catch (InvalidKeyException e) {
throw new CryptoException(e);
}
Run Code Online (Sandbox Code Playgroud)
今天我在我的服务器用户上安装了Java 1.6.0.26,当我尝试运行我的应用程序时,我得到以下异常.我的猜测是它与Java安装配置有关,因为它在第一个工作,但在更高版本中不起作用.
Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
at my.package.Something.decode(RC4Decoder.java:25) ~[my.package.jar:na]
... 5 common frames omitted
Run Code Online (Sandbox Code Playgroud)
第25行是:
c.init(Cipher.DECRYPT_MODE, secretKeySpec);
注意:
*服务器的1.6.0.12 …
我用容器管理的安全性编写了简单的应用程序.问题是当我登录并打开另一个我注销的页面时,然后我回到第一页,我点击任何链接等或刷新页面我得到这个例外.我想这是正常的(或者可能不是:))因为我退出了会话被破坏了.我该怎么做才能将用户重定向到例如index.xhtml或login.xhtml,并使他免于看到错误页面/消息?
换句话说,如何在我退出后自动将其他页面重定向到索引/登录页面?
这里是:
javax.faces.application.ViewExpiredException: viewId:/index.xhtml - View /index.xhtml could not be restored.
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:212)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:110)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at filter.HttpHttpsFilter.doFilter(HttpHttpsFilter.java:66)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:619)
Run Code Online (Sandbox Code Playgroud) 我可能在这里完全是noob,但我仍然不确定CSRF(跨站点请求伪造)攻击到底是什么.那么让我们看看三种情况......
1)我有一个POST表单,用于编辑我的网站上的数据.我希望只有登录的用户才能编辑这些数据.
2)我有一个站点,登录的用户和访客都可以使用.该站点的某些部分仅供登录用户使用,但也有所有用户都可以使用的POST表单 - 匿名而非(例如标准联系表单).是否应该保护联系表格免受CSRF攻击?
3)我有一个完全没有身份验证系统的站点(好吧,也许这是不切实际的,所以假设它有一个管理站点,它与其余部分分开,管理部分得到了适当的保护).该站点的主要部分仅供匿名用户使用.是否需要保护其上的POST表格?
在1)的情况下,答案显然是肯定的.但是在2和3的情况下我不知道(并且2和3之间的差异是否显着?).
在我发现的关于加密ViewState的所有参考页面中,对密码的唯一评论是"您的密码在这里".
是否有关于我们应该使用的密码长度/复杂性的建议?
我一直在尝试使用jsf中的primefaces实现一些基本的推送功能.我在那里使用了反例http://www.primefaces.org/showcase-labs/push/counter.jsf.基本上它是一个增加共享计数器的按钮.运行此示例时,我总是收到此错误:
ERROR: MAC did not verify!
Run Code Online (Sandbox Code Playgroud)
我的理解是每个会话都会生成一个mac,然后检查每个传入的消息,以验证源没有改变(我认为).我一直无法找到原因并查看了其他主题,例如:
JSF:Mojarra 2.1到2.2迁移导致ViewExpiredException
不幸的是,这些并没有解决我的问题 两者似乎都是由我没有得到的ViewExpiredException引起的.我发现阻止它的唯一方法是在web.xml中将状态保存方法从客户端更改为服务器:
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
Run Code Online (Sandbox Code Playgroud)
但是,当这样做时,计数器不再共享,但似乎是每个用户,这不是我想要的.我的最终目标是实现一个聊天室,其中大部分都在那里,但现在它使用的短轮询不是很容易扩展.看过primefaces推后我认为这将是理想的,但一直在努力使用它.
我尝试过多个Web服务器(Tomcat,Jetty和Glassfish),并尝试使用不同版本的JSF(Mojarra)和primefaces版本(3.4和4.0).我已在多个浏览器和多台计算机上测试过它.有时我会在收到错误之前将计数器增加几次,有时它会立即发生.我没有例外或严重的错误,一切都编译.我还想提一下,我之前在其他项目上遇到过这个错误,但是在重新启动服务器后它已经消失了.当使用primefaces时,它总会发生.任何帮助将不胜感激.
编辑
在web.xml中将状态保存保留到服务器以避免MAC错误时,我注意到共享计数器在同一台计算机上以每个浏览器为基础工作.这意味着如果我有多个选项卡或窗口,则在所有选项卡的一个更新中更新计数器.但它不能跨浏览器工作,firefox中的计数器更改不会反映在chrome或IE中,或其他方式.如果在两台独立的计算机上也没有反映出来.我不知道这是否有帮助,但我想我会提到它.
编辑
在注意到示例中的bean是会话作用域后,我将其更改为应用程序作用域.当然,会话作用域意味着每个浏览器都有自己的副本.现在,更改将反映在浏览器和计算机上.回到我原来的问题,我仍然想知道为什么将保存状态更改为服务器修复了MAC错误,这是什么意思?我假设服务器现在必须维护每个会话的视图状态而不是客户端,可伸缩性更低/客户端 - 服务器流量更多?从我所看到的,如果你将保存状态设置为服务器,你无法检查查看过期的异常或阻止用户创建视图(如果它们已经有太多,这是正确的吗?)
我将我的应用程序从PrimeFaces 3.5.18 + Mojarra 2.1.26移植到PrimeFaces 4.0.2 + Mojarra 2.2.4.
当我重新启动服务器时,我得到一个ViewExpiredException.
服务器日志包含: ERROR: MAC did not verify!
我知道默认情况下,MyFaces会生成一个随机密码来对视图状态进行编码,因此每次服务器重新启动时,都会生成一个新的随机密码.Mojarra 2.2的行为方式是否相同?
在这种情况下,我需要设置哪些上下文参数?谷歌搜索Mojarra 2.2上下文参数我能找到的最好的是这个,但是在MyFaces中没有SECRET或MAC_SECRETS参数
先谢谢,菲利普
jsf ×3
csrf ×2
java ×2
jsf-2 ×2
mojarra ×2
client-side ×1
jsf-2.2 ×1
logout ×1
owasp ×1
passwords ×1
primefaces ×1
security ×1
state-saving ×1
xss ×1