我们在jsp中有用户SSN,在html页面的源代码中显示为:
<a href="onclick:submitsomeform(123456789)"
为了避免这种情况,我做了几个名为getEncryptedSSN()
和getDecryptedSSN()
的方法,可以从JSP调用。这些方法使用javax.crypto
来加密/解密ssn字符串,但是,设置编码标准导致此导入为"disallowed"
。所以现在我没有选择如何避免在HTML的视图源中显示SSN。我们不能在表单提交中不通过SSN的路由,因为在DB中,SSN字段是唯一的主要字段。
有没有其他方法可以使用javax.crypto
简单地加密/解密java中的字符串?
答案 0 :(得分:5)
显然,将SSN作为主键很糟糕 - 但是你可能无法改变它。
查看此OWASP页面:Insecure Direct Object References:
防止不安全的直接对象引用需要选择保护每个用户可访问对象的方法(例如,对象编号,文件名):
- 使用每个用户或会话间接对象引用。这可以防止攻击者直接针对未经授权的资源。例如,代替使用资源的数据库密钥,授权给当前用户的六个资源的下拉列表可以使用数字1到6来指示用户选择的值。应用程序必须将每用户间接引用映射回服务器上的实际数据库密钥。 OWASP的ESAPI包括顺序和随机访问参考映射,开发人员可以使用它们来消除直接对象引用。
- 检查访问权限。每次使用来自不受信任来源的直接对象引用都必须包含访问控制检查,以确保用户获得所请求对象的授权。
醇>
我已经使用了他们的ESAPI中的Access Reference Map - 这非常简单。我们使用随机字符串替换了我们的唯一ID,这些字符串与用户的会话相关联。
答案 1 :(得分:2)
一个显而易见的选择是编写自己的加密功能。你可能不会写出像安全人员提出的那样安全的东西,但根据上下文,一些简单的东西可能是足够的,即会让偶然的窥探者感到沮丧,并接受如果CIA或Mosad或任何试图破解你的加密的人,他们会在几分钟内搞清楚。我不知道你对黑客有多大的目标。如果你在银行或美国国税局工作或许多人可能正在试图拦截你的交易并且拦截的后果很高,那么别忘了,你想要工业级的安全。但是,如果您正在为Joe的宠物护理建议交换论坛工作,并且除了SSN本身之外没有特别敏感的信息,并且没有大量的敌人可以帮助您,本土解决方案可能就足够了。
答案 2 :(得分:1)
由于其敏感性,您应该在数据库端加密SSN。 SSN不应存储为纯文本值,因为它们对黑客访问完全可见。看看SONY,还有更多的公司被黑了。
我想说使用数据库加密函数在数据库中加密它们。我不知道你的目标是MySQL或Oracle等等。然后,您可以使用数据库中的加密SSN。这是一个mysql参考: http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html