我正在讨论如何保护存储在Java程序中的敏感信息(例如密码)。 根据安全要求,将清除包含敏感信息的内存,例如将字节值设置为全零。 担心的是攻击者可以观察与应用程序进程相关的内存,所以我们要尽可能地限制这种敏感信息的时间窗口。 以前,项目涉及C ++,因此memset()已经足够了。 (顺便说一句,memset()的使用已经成为问题,因为已知某些编译器会根据假设来优化它的使用,因为以后不会使用内存,所以不需要将其归零第一个地方,这个blurb对于那些Google为“memset”和“清除内存”的人来说是一个免责声明)。 现在,我们已经掌握了一个Java项目,正在按这个要求。 对于Java对象,我的理解是: 一个空引用只改变引用的值; 对象的堆上的内存仍然包含数据 一个像String这样的不可变对象将无法修改数据(或者至less不是很容易的,在具有相应的安全pipe理器的虚拟机的范围内) 代代垃圾收集者可以在整个地方复制物体(如这里所述 ) 而对于原始的,我的理解是: 本地方法中的原始typesvariables将被分配到堆栈上,并且: 当你改变它的值的时候,你直接在内存中修改它(而不是使用引用来处理堆上的对象)。 在某些情况下,副本可以/在“幕后”进行,例如将其作为parameter passing给方法或装箱(自动或不是)创build包含另一个具有相同值的原始variables的包装的实例。 我的同事声称,Java原语是不可改变的,NSA和Oracle都有文档说明在这种需求方面缺乏对Java的支持。 我的立场是,基元可以(至less在某些情况下)通过将值设置为零(或布尔值为false)来清零,并且内存以这种方式被清除。 我试图validationJLS或其他“官方”文档中是否存在关于JVM在涉及基元的内存pipe理时所需行为的语言。 我能find的最接近的是Oracle网站上的“Java编程语言安全编码指南” ,其中提到了在使用后清除字符数组。 当我的同事把原始的东西称为不可改变的时候,我会质疑定义,但我很确定他的意思是“记忆不能适当地调零” – 我们不用担心。 我们没有讨论他是否意味着最后的变数 – 从我们一般说的上下文来看。 有没有什么明确的答案或参考? 我会很感激任何可以告诉我我错在哪里或确认我是对的。 编辑 :经过进一步的讨论,我已经能够澄清,我的同事想到的是原始包装,而不是原始本身。 所以我们留下的是如何安全地清理内存,最好是对象的原始问题。 另外,为了说明,敏感信息不仅仅是密码,还包括IP地址或encryption密钥等。 有没有商业JVM提供像某些对象的优先处理function? (我想这实际上违反了Java规范,但我想我会问,以防万一我错了。)
道歉,如果这已经被问及答复; 我已经看了一大堆,但还没有find我正在问什么。 – 假设我在http://example.com/上的 web应用程序使用私有和未公开的Web API( http://api.example.com/)来获取数据,例如通过XHR或JSONP。 另外假设这个networking应用程序是匿名的 – 它不需要用户login。 由于客户端和服务器之间有通信,任何人都可以打开Fiddler等来查看确切的请求和响应,更不用说检查客户端的JS代码了。 在这种情况下,如何防止某人在非Web客户端应用程序中使用您的API? 例如iPhone应用程序或服务器端。 据我了解,第二点删除了类似OAuth的选项,第三点删除了例如API密钥甚至SSL的选项。 我曾经想过一些事情,比如基于时间的令牌或者秘密的salt,它们会在第一次加载的时候被注入到页面中,但是一个iPhone应用可以在发出API请求之前偷偷的加载你的网页。 那么除了简单的混淆之外还有什么方法 – 通过默默无闻的安全吗? – 如果所有这些都太抽象了,下面是一个简单的例子: Google.com通过一些私人和无证的API来获取自动完成的数据 – 但是在网上打开。 什么是阻止我在iPhone应用程序中使用它?
哪些浏览器支持HttpOnly cookies,以及哪个版本? 请参阅http://www.codinghorror.com/blog/archives/001167.html关于HttpOnly cookie和XSS预防的讨论。
我真的很喜欢MongoDB的自动生成的ID。 他们真的很有用。 但是,公开使用它是否存在? 假设有一个post集合,并且/ posts页面需要id参数(类似/ posts / 4d901acd8df94c1fe600009b)并且显示关于它的信息。 这样用户/黑客就会知道文档的真实对象ID。 是好还是不安全? 谢谢
首先,我的背景。 我已经在大型networking系统上工作了十多年,Android是我过去两个月来一直在寻找的东西; 你可以想象,这个差距是相当广泛的:) 看看Android的安全和权限以及数据存储部分的文档,直接与开发人员交stream,阅读书籍和教程,整个模型是如何工作的非常清楚。 但是,我无法findSQLite和SharedPreferences文件是否足够安全地存储微妙的非encryption信息(例如,OAuth令牌)的答案。 有人可能以任何方式抓住他们吗? 引用Android的文档: 应用程序存储的任何数据都将被分配该应用程序的用户ID,而其他软件包通常无法访问。 这是不正常的部分给我额外的白发:) 谢谢,有用的答案,赞赏:)
使用.htaccess密码保护目录是防止未经授权的用户看到其文件的最好方法吗? 有没有其他方法可以保护目录的内容,同时还可以让经过身份validation的用户查看它? 另外,有人不能试图暴力破解,造成服务器的压力?
我正在部署一个使用JAWS的应用程序,直到2013年底,当我收到警告,它才工作,然后今天早上Java完全封锁了它。 法文的信息是: 应用bloquéepar lesparamètresdesécurité Java应用程序自动执行的版本已过时或到期。 这将大致转化为: 应用程序被安全设置阻止 您的安全设置已阻止运行已过时或已过时的Java自签名的应用程序。 语法不清楚,句尾可以看作是: …阻止自签名应用程序运行时使用过时或过时的Java [运行时] ,这意味着本地运行时间太旧,但自签名无损 …阻塞了已经过时或过时的Java [编译器]自签名的应用程序 ,这意味着所使用的Java编译器太旧了 我在网上search了英文的完全相同的信息,但我找不到它。 所以语法还不清楚。 请注意,在消息中没有Name: xyz / From: http://url/ ,只有我上面input的文本和一个蓝色的“i”图标。 现在,我不太明白这个错误消息的确切含义,但是我知道有一个问题,因为我的JAR文件都是自签名的。 我已经在其他Windows客户端上面对过这个问题,而且很简单: 我从我的密钥库中提取了一个.cer证书; 下载到客户机上,打开它; 让客户在本地机器上安装它作为可信任的来源。 它在我的testing设置和一个客户上的工作就像一个魅力,但另一个仍然有问题,不能运行我的软件。 这是我的一个大问题,我不知道该怎么做。 我应该升级我的Java编译器,重新编译一切,再次签署每个JAR文件并交叉手指? 我怎样才能使该Windows信任我的证书,让Java应用程序运行?
是否有一种not涉及CAPTCHA的forms安全方法? validation码很烦人,但我需要安全,因为我正在接收表单垃圾邮件。 我的表单是PHP。
我正在开发一个Android应用程序,我打算发布它(付费应用程序)。 我听说盗版Android应用程序非常容易(比iPhone更容易)。 我想知道从你的经验或你知道什么,可以如何增加我的应用程序的安全? 我知道我永远无法获得100%的安全,但我想让人们更难以盗版或非法分发任何想法,经验,评论,你可以分享? 这将不胜感激最好的问候
假设您使用HTML5 / JavaScript创build了一个在线游戏。 所有的代码将被下载到用户浏览器,他们将运行游戏。 什么是阻止某人将游戏复制到他们的计算机,并注入function和模块作弊? 例如,他们可以编写一个自动瞄准最近的敌方精灵的函数。 有没有什么基本的方法来保护人们通过以某种方式devise游戏代码来做这种事情?