Tag: 安全

如何在不泄露密码的情况下连接到需要密码的数据库?

我正在创建一个应用程序,我需要连接到数据库。 数据库需要登录/密码,因此应用程序可以执行select和insert等操作。 在应用程序中,我需要使用登录名和密码连接到数据库,因此应用程序可以自由地在数据库上执行某些任务。 我的问题是:如何在不泄露密码的情况下存储和使用密码连接数据库? 我不能简单地使用哈希或加密来存储密码,因为数据库必须识别密码(我认为大多数或所有数据库必须以纯文本forms接收密码)。 。 。 注意:连接由应用程序进行。 没有人工输入来进行连接。 (编辑)有关应用程序的更多信息:它是一个使用servlets / jsp的Web应用程序。 数据库位于应用程序的同一服务器上。 应用程序的用户是没有完全管理员权限的默认用户,但它可以插入/删除行并执行涉及表中的查询和数据修改的大多数操作。

Android和Java中的RSA加密

我想用RSA加密加密字符串。 我的公钥/私钥生成并存储在DB中。 在android中,我使用这段代码: public static String encryptRSAToString(String text, String strPublicKey) { byte[] cipherText = null; String strEncryInfoData=””; try { KeyFactory keyFac = KeyFactory.getInstance(“RSA”); KeySpec keySpec = new X509EncodedKeySpec(Base64.decode(strPublicKey.trim().getBytes(), Base64.DEFAULT)); Key publicKey = keyFac.generatePublic(keySpec); // get an RSA cipher object and print the provider final Cipher cipher = Cipher.getInstance(“RSA”); // encrypt the plain text using the […]

生产JVM的安全调试

我们有一些应用程序有时会陷入糟糕的状态,但仅限于生产(当然!)。 虽然进行堆转储可以帮助收集状态信息,但使用远程调试器通常更容易。 设置它很容易 – 只需将其添加到他的命令行: -Xdebug -Xrunjdwp:transport = dt_socket,server = y,suspend = n,address = PORT 似乎没有可用的安全机制,因此在生产中启用调试将有效地允许任意代码执行(通过hotswap)。 我们在Solaris 9和Linux(Redhat Enterprise 4)上运行了1.4.2和1.5个Sun JVM。 我们如何启用安全调试? 有没有其他方法来实现我们的生产服务器检查目标? 更新:对于JDK 1.5+ JVM,可以指定调试器应绑定的接口和端口。 因此,如果在服务器上正确设置了SSH,KarlP建议绑定到环回并仅使用SSH隧道连接到本地开发人员框。 但是,似乎JDK1.4x不允许为调试端口指定接口。 那么,我们可以阻止访问网络中的某个调试端口,或者在操作系统本身中进行一些特定于系统的阻塞(如Dared建议的那样,IPChains等)? 更新#2:这是一个让我们限制风险的黑客,即使在1.4.2 JVM上也是如此: 命令行参数: -Xdebug -Xrunjdwp: transport=dt_socket, server=y, suspend=n, address=9001, onthrow=com.whatever.TurnOnDebuggerException, launch=nothing 用于打开调试器的Java代码: try { throw new TurnOnDebuggerException(); } catch (TurnOnDebugger td) { //Nothing } TurnOnDebuggerException可以是任何保证不被抛出的exception。 我在Windows机器上对此进行了测试,以certificate(1)调试器端口最初没有接收到连接,并且(2)抛出如上所示的TurnOnDebuggerexception会导致调试器生效。 […]

如何正确地使JSP会话无效?

所以这就是问题所在。 当用户退出我的网站时,他们仍然可以点击后退按钮并继续使用该网站。 为了跟踪用户是否登录,我创建了一个会话属性“isActive”。 用户登录时该属性设置为true,并且在注销时会话无效之前(冗余)删除该属性。 同样在每个页面上,我都会检查属性是否存在。 我还指定不应在其head标签中缓存页面。 尽管如此,用户仍然能够回击浏览器,并继续使用该网站,就好像他们从未注销过一样。 有关如何解决此问题的任何想法? 这是代码: 登录Servlet: … session.setAttribute(“isActive”, true); //Redirect to home page. 检查登录的JSP: 注销Servlet: request.getSession().removeAttribute(“isActive”); request.getSession().invalidate(); response.sendRedirect(“index.jsp”); 内部头标记: 谢谢

在Windows JRE中导入StartCom CA证书

我有一个Java应用程序访问使用StartCom SSL证书的服务。 为了实现这一点,我需要将StartCom CA证书添加到Java的信任库中,因为它们默认不在那里。 我已经使用这些命令在linux上成功完成了这项工作 sudo keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt -alias startcom.ca -file ca.crt sudo keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt -alias startcom.ca.sub.class1 -file sub.class1.server.ca.crt sudo keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt -alias startcom.ca.sub.class2 -file sub.class2.server.ca.crt sudo keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt -alias startcom.ca.sub.class3 […]

存储数据库密码的最佳实践

我正在开发一个将访问数据库的自定义服务器应用程序。 我需要决定将凭据(和地址)存储到该服务器的位置。 常见的解决方案是将凭证放在配置文件中。 但是,我不希望受感染的服务器意味着黑客可以访问数据库(托管在单独的服务器上)。 我可以将凭据存储在环境中,但这只是通过默默无闻的安全性。 Evil先生可以在环境中寻找它。 有人建议加密。 但是,如果我将密钥存储在可执行文件中,快速解编译(我们使用的是Java),我仍然注定失败。 我还想避免每次启动服务器时都输入一个释义。 有什么建议么? 我觉得我错过了一些简单的事情。 谢谢

沙盒JSR-223

我正在尝试沙箱JSR-223。 具体来说,我不希望任何脚本可以访问我的任何类。 (我听说Rhino可以用ClassShutter做到这一点,但我想一般这样做。即对于JSR-223的所有脚本引擎)。 我首先尝试使用AccessController.doPrivileged解决方案, 完全不传递任何权限 。 它适用于大多数权限,但脚本仍然可以访问我的所有公共类(它似乎忽略“包访问”权限……?)。 我找到了这个 。 我的问题是:如何在脚本引擎上安装自定义ClassLoader? (或者,如果必须,如何全局替换ClassLoader?)

日志锻造强化修复

我正在使用Fortify SCA来查找我的应用程序中的安全问题(作为大学作业)。 我遇到了一些我无法摆脱的“Log Forging”问题。 基本上,我记录了一些来自Web界面的用户输入值: logger.warn(“current id not valid – ” + bean.getRecordId())); 并且Fortify将此报告为日志伪造问题,因为getRecordId()返回用户输入。 我已经关注了这篇文章 ,我正在用空格替换“新行”,但问题依然存在 logger.warn(“current id not valid – ” + Util.replaceNewLine(bean.getRecordId())); 任何人都可以提出解决此问题的方法吗?

在java中设置Process对象的安全性

有人可以告诉我如何限制通过流程对象访问系统属性? 如果我通过进程对象运行以下代码段,我可以抛出安全性exception。 System.getProperty(“user.home”); 请告诉我如何配置过程对象的证券。 在ProcessBuilder类文档中,在环境方法中写入: 系统可能不允许修改环境变量或禁止某些变量名称或值。 所以请告诉我如何禁止某些变量值。 更新:假设我使用的是Java Web应用程序,并为客户端提供了一个代码平台。 然后,如何为java Web应用程序和客户端应用程序单独配置java安全性。(因为我永远不想限制Web应用程序获取System的任何属性,而我必须限制客户端使用这些命令来应用程序漏洞)

挂起容器请求LDAP用户角色的进程

在我的应用程序中,我使用基于表单的身份validation和LDAP-Realm。 对于授权,我使用数据库。 据我所知,这工作如下 App –> (user, pass) –> LDAP ask for security roles for ‘user’ –> JACC / Database <– Administrator — 我可以挂钩我的应用程序调用的进程ask for security roles for ‘user’吗? 背景: LDAP说: Okay, ‘user’ is authentified 数据库: give me all roles where username = user 现在我想自定义数据库查询: give me all roles where username = ‘user’ AND some more […]