草庐IT

企业安全

全部标签

java - volatile 保证可变对象的安全发布?

通过阅读Java并发实践我能看到:要安全地发布对象,对象的引用和对象的状态必须同时对其他线程可见。正确构造的对象可以通过以下方式安全发布:从静态初始化程序初始化对象引用将对它的引用存储到volatile字段或AtomicReference将对它的引用存储到正确构造的对象的最终字段中将对它的引用存储到一个由锁。但是,我对第二个成语感到困惑。由于volatile只能保证引用对另一个线程可见,但它不同步它引用的对象构造。那么它如何保证可变对象被正确构造,正在构造这个对象的线程被另一个线程中断了? 最佳答案 我们需要证明构造一个对象并将其分

java - 在 servlet 中使用 java.util.Timer 是否安全?

出于多种原因,在servlet中使用线程并不是好的做法。java.util.Timer似乎是线程的包装器。那么,使用它是否也不安全?如果是这样,在servlet中安排任务的最安全方法是什么? 最佳答案 是的,您可以使用计时器。要记住的一件重要事情是在servlet停止时取消那个计时器。如果您忘记取消定时器,您的webapp将遭受内存泄漏(类加载器泄漏,因为定时器的线程通过其ContextClassLoader绑定(bind)到WebappClassLoader)并且无法多次部署。 关于j

java对象序列化 - 线程安全?

我正在编写高度并发的应用程序,它广泛修改MyClass的对象。该类由几个字段组成。我的问题是如何防止在另一个线程序列化期间修改特定对象?问候,马特 最佳答案 通过synchronizing序列化和修改对象状态的方法。 关于java对象序列化-线程安全?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4003741/

java - 如何在没有同步方法的情况下从不同的线程安全地刷新缓冲区?

有多个线程,比如B、C和D,每个线程都以高频率将小数据包写入缓冲区。他们拥有自己的缓冲区,没有其他人可以写入它。写作必须尽可能快,我已经确定使用synchronized会使它慢得令人无法接受。缓冲区只是字节数组,以及第一个空闲元素的索引:byte[]buffer;intindex;publicvoidwrite(byte[]data){//somecheckingthatthebufferwon'toverflow...notimportantnowSystem.arraycopy(data,0,buffer,index,data.length);index+=data.length;

Java 安全测试

在Java中有自动安全测试这样的东西吗?如果是这样,它是如何实现的?它只是为尝试利用已知的服务器漏洞而编写的JUnit测试,还是它们以安全为中心的测试框架?作为一个segue,我也对这个OWASP安全测试框架感兴趣,但无法判断他们是在经典意义上使用“框架”(意味着要遵循的一组指南和程序),还是在软件上下文(他们实际提供自动化安全测试组件的地方)。感谢任何能为我阐明这一点的人! 最佳答案 不知道它是否正是您要找的东西,但是StephenColebourne(joda-time和future新标准java8日期时间API的作者)有一篇关

java - 毕竟 log4j 不是线程安全的吗?

(这是在SLES11、Java7、Tomcat6、log4j-1.2.16上)我们使用log4j将不同的内容写入不同的日志文件。我继承了这段代码,所以无论好坏,通用结构都暂时保留在这里。记录器将创建两个日志文件:main.log和stats.log。特定的统计消息通过单独的调用记录到两个记录器(您将在下面看到),并且一大堆其他内容记录到主日志。因此,在我们的所有代码中,您会看到类似Log.logMain(someMessageToLog);的内容。在我们的代码(由多个线程执行)的一个地方有以下内容:StringstatsMessage=createStatsMessage();Log.

java - 我如何找到验证我的 JDK 安全提供程序的加密强度?

我有这个小程序可以在我的JDK安装中打印出所有受支持的提供程序,但我想知道是否有人知道我可以如何更改此程序以打印出每个提供程序的“强度”?importjava.security.Provider;importjava.security.Security;publicclassSecurityListings{publicstaticvoidmain(String[]args){for(Providerprovider:Security.getProviders()){System.out.println("Provider:"+provider.getName());for(Provi

java - 共享异常实例是否安全

我们正在制作一个类似Excel的系统。当我们打开文档并发现不受支持的函数时,我们抛出异常。我们只支持一小部分excel函数,这可能会经常发生。问题是当有很多包含不受支持的函数的单元格时,会创建很多很多异常实例。创建那么多异常实例会消耗不可忽视的时间。我们在异常类中没有任何特殊属性。我们需要知道的是抛出异常的事实。我们刚刚发现错误发生并将单元格标记为错误。所以我们决定共享一个异常实例,并在需要时抛出它。异常实例可以由多个线程抛出。我怀疑堆栈跟踪可能已损坏,但是,我们没有看到它。我们只是捕获异常,并将相应的单元格标记为错误。我的问题是:在这种情况下,共享异常实例是否安全?好吧,我阅读了以下

java - servlet session ,注销后,按下浏览器的后退按钮时,再次显示安全页面

这个问题在这里已经有了答案:Preventuserfromseeingpreviouslyvisitedsecuredpageafterlogout(7个答案)关闭5年前。我有一个servlet和一个HTML页面。如何防止用户在注销后点击浏览器的后退按钮?我在stackoverflow中读过同样的问题,但答案是使用浏览器历史记录禁用java脚本或使用页面——在httpheader中没有缓存。我们如何使用阻止返回操作的servlet来实现它,没有缓存的http-header是无用的,因为Firefox表示页面在再次刷新两次时已过期显示安全页面。我已经在某种程度上做了,示例方法只是为了尝试

java - 如何对安全密码执行验证。 char[] 上的正则表达式?

这个问题是这里问题的后续问题:Whyischar[]preferredoverStringforpasswords?这个问题对于理解为什么使用char[]而不是String很好;但是,它没有解释如何以安全的方式对char[]执行密码验证。这就是我想知道的。简单来说,我需要检查密码是否满足以下要求:至少包含一个大写字母至少包含一个小写字母至少包含一个数字至少包含一个符号至少是n个字符,但不超过m现在我明白了如何使用正则表达式来执行验证......这些答案展示了如何做到这一点:RegexpJavaforpasswordvalidationPasswordmustbe8charactersi