Tag: 安全

如何最好地清理Java webapp中的输入

我们使用jsp,servlets,bean和mysql数据库。 我们不希望限制用户在表单字段上输入的字符。 那么如何清理输入以及如何确保输出不会因恶意活动而更改。 有没有办法在发送输出时我可以检查是否已经发送了额外的代码。 就像假设有搜索输入字段 – 用户提供的内容类似于alert(“I am here”) 。 有没有我可以知道这是一个HTML标签。 如果用户在链接字段中附加了一个额外的参数,那么就像之前和之后的检查一样,我可以为文档做一些额外的链接字段。

通过许可证或密钥保护Java应用程序

我想创建一个仅在具有密钥或许可证的计算机上运行的桌面应用程序。 如何实现这一目标?

在Java Web应用程序中存储密码变量的不同方法?

我已经实现了一个例程,当用户提交表单时,会向管理员发送电子邮件。 为此,我使用了Java Mail API。 我在Microsoft Outlook上设置了一个虚拟帐户,用于发送电子邮件。 在代码中我硬编码了密码。 我担心当我托管网页时这将是一个安全问题。 这是我的代码。 我写了一个私函数: private void getSession(){ this.session = Session.getDefaultInstance(properties, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(“xxxxxxxxx@outlook.com”, “xxxxx_password_xxx”); } }); } 在我的public execute()方法中,我调用getSession()方法并生成消息。 public String execute() throws Exception { getSession(); Message message = new MimeMessage(this.session); message.setFrom(new InternetAddress(“xxxxxxxxxxxxx@outlook.com”)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(“admins.email@xxxxx.com”)); message.setSubject(“Form submit notification”); //… } 在我托管网页时,在会话方法中对密码进行硬编码是否安全? 如果没有,那么一些指针来实现替代方案。 […]

无法使用Java 7u21启动applet

所以我们安装了Java 7u21版本,该版本应该会加强applet的安全性。 不幸的是,它收紧了很多,以至于我们的applet不再运行了。 不好。 有趣的是,它只在我们使用JWS操作时才停止工作。 如果我们从标准网页将其作为标准applet启动,一切正常。 在JWS模式下,我们至少会遇到reflection和java.lang.Thread.setDefaultUncaughtExceptionHandler安全问题。 证书看起来不错。 来自Oracle的发行说明没有提供与JWS相关的任何内容的大量输入。 因此,我对社区的问题是:是否有人有想法或(甚至更好)解决这个问题? 与给定建议/评论相关的其他信息: 这个小程序由全球数百个第三方客户运行,因此不幸的是,更改安全策略是不可取的。 该问题对于客户来说是可重现的。 但我可以确认更改策略文件可以解决问题。 当我从Eclipse启动的Tomcat运行applet时(因此当然没有签名的applet),它会按预期在浏览器中显示警告通知。 作为一个容易上当的人,我允许applet运行,因为它是从我自己的开发环境启动的。 这仍然会导致安全性失败。 我已经考虑过,如果这是Java中的错误,但我想看看是否有其他人看到同样的问题。 我想我们都知道Oracle修复bug的周转时间并不总是最好的…… 感谢您的任何意见。 非常感谢Tony,你的建议让我能够在7u21中创建applet,正确地说; 我认为这是一个向前的步骤,我正在通过浏览器签署和唤醒许多小程序,这些超过7u21。 我今天早些时候不想这样做。 但是我被困了好几个小时,事实上我还没有从我的遗留应用程序中唤醒我的第一个第三方applet(即在JVM 1.6或更老版本中工作正常)。 涉及的applet,我签了他们,但我总是得到错误:SecurityException – “Bad applet class name”。 我有一些applet和html代码调用它们,问题是我的第一个applet链(在调用链中没有任何其他)可能不像其他签名的applet那样正在做(这些applet来自java网站进行培训),这个第3方applet简单不运行并抛出上面提到的exception。 我的第三部分applet我不知道它在内部做了什么。 对不起,如果没有源代码,我可能会要求一个不易解决的特殊情况,但是,无论如何,请相信告诉我任何想法。 最好的祝福

FindBugs:EI_EXPOSE_REP背后的真正威胁

FindBugs引发了一个名为EI_EXPOSE_REP的错误,其描述如下: EI:可以通过返回对可变对象的引用来公开内部表示 返回对存储在对象的一个​​字段中的可变对象值的引用会公开对象的内部表示。 如果不受信任的代码访问实例,并且对可变对象的未经检查的更改会危及安全性或其他重要属性,则需要执行不同的操作。 在许多情况下,返回对象的新副本是更好的方法。 关于SO( 1,2和3 )的几个问题已经解决了如何避免这种错误,我理解这是防止不可变对象修改的开发最佳实践,但是我不清楚为什么这样的bug属于MALICIOUS_CODE类别。 这背后的真正威胁是什么? 如果这是一个恶意代码问题,攻击者几乎可以做任何他想做的事情,可变性不会是最大的问题。 如果它是一个漏洞,只有在执行了不受信任的代码时它才能被利用,而我无法看到任何这样的用例。 对此有何看法? 谢谢 !

如何在java中安全地擦除内存中的机密数据,并保证它不会被“优化”?

String secret=”foo”; WhatILookFor.securelyWipe(secret); 我需要知道它不会被java优化器删除。

Java安全性 – MSCAPI提供者:如何在没有密码弹出的情况下使用?

我已经设法在我的应用程序中使用Sun的MSCAPI提供程序。 我现在遇到的问题是它总是弹出一个窗口,要求输入密码,即使我已经在代码中提供了密码。 这是一个问题,因为我需要在Web服务中使用加密function。 这是我现在的代码: String alias = “Alias to my PK”; char[] pass = “MyPassword”.toCharArray(); KeyStore ks = KeyStore.getInstance(“Windows-MY”); ks.load(null, pass); Provider p = ks.getProvider(); Signature sig = Signature.getInstance(“SHA1withRSA”,p); PrivateKey key = (PrivateKey) ks.getKey(alias, pass) sig.initSign(key); sig.update(“Testing”.getBytes()); sig.sign(); 这工作得很好,但是在最后一行运行时我得到一个弹出窗口询问密码。 我该如何预防呢?

设置catalina.policy以允许servlet访问文件

我们有一个基于b-tree的本地开发的三元组存储,我想用它来在许多servlet应用程序中进行持久存储。 我不想将b-tree索引文件嵌入到servlet .war中,而是希望将它们存储在已知位置并让servlet直接访问它们。 这一切都在Jetty中工作,但是当我在Tomcat中尝试它时会引发安全性exception。 我被告知Tomcat的安全模型需要显式权限,以便servlet访问解压缩.war的目录树之外的文件。 如果我已正确理解Tomcat(版本5.5)文档,则添加到catalina.policy的以下内容应允许servlet访问索引文件所在的目录: grant codeBase “jar:file:${catalina.home}/webapps/mytestapp/-” { permission java.io.FilePermission “/var/data/tdb/-“, “read, write, delete”; } 但是,我仍然得到一个安全例外: java.io.FileNotFoundException: /var/data/tdb/kb/node2id.idn (Permission denied) at java.io.RandomAccessFile.open(Native Method) … 勾选明显的哑错误:我已检查索引文件是否位于正确的位置,具有正确的权限,并且没有损坏。 我将非常感谢您对我在安全设置中出错的任何建议或提示。

为什么Java 7请求签名应用程序的网络权限?

从Java 7 Update 5开始,我的Java Web Start应用程序正在请求建立连接的权限。 该应用程序使用有效证书进行签名。 将显示一个弹出窗口,其中包含以下文本: 该应用程序已请求与www.example.com建立连接的权限。 你想允许这个动作吗? [确定] [取消] 在拒绝请求时,我在控制台上获得此跟踪: Uncaught error fetching image: java.lang.SecurityException at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkConnect(Unknown Source) at com.sun.javaws.security.JavaWebStartSecurity.checkConnect(Unknown Source) at sun.awt.image.URLImageSource.checkSecurity(Unknown Source) at sun.awt.image.ImageRepresentation.imageComplete(Unknown Source) at sun.awt.image.InputStreamImageSource.errorConsumer(Unknown Source) at sun.awt.image.InputStreamImageSource.setDecoder(Unknown Source) at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source) at sun.awt.image.ImageFetcher.fetchloop(Unknown Source) at sun.awt.image.ImageFetcher.run(Unknown Source) 这是请求权限时的线程转储: “Image Fetcher 2” daemon prio=8 tid=0x04198000 […]

如何安全地删除java中的文件

如何安全删除java中的文件? 我在javafaq.nu上尝试了代码,但问题是由于这个bug,你一旦映射了它就无法在windows上删除它。 然后我尝试在Windows上使用sysinternals sdelete ,但是第一次使用时我必须单击一个使用协议,我想避免使用它。