首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP web应用程序安全性

PHP web应用程序安全性
EN

Security用户
提问于 2013-07-23 00:37:49
回答 3查看 908关注 0票数 -5

我正在构建一个PHP web应用程序,它需要增强安全性,因为它包含非常敏感的信息(在数据库中)。

我认为我希望使用与每个用户对应的自签名SSL证书,并将它们存储在web根文件夹之上的一个级别(为了简单起见,/var/www/certs,其中的根是/var/www/domain1.com)。我不同意将密钥和IV存储在数据库中的选项,因为如果攻击者获得数据库的副本,他拥有所有门的密钥,这使得加密无效。这就是为什么我考虑使用p12证书,只作为密钥和向量存储的原因。

通过利用漏洞或任何其他方法获得对应用程序的访问权限的攻击者是否有可能在以前不知道证书的情况下获得对证书的访问权?(如果攻击者利用应用程序本身的漏洞,而不是服务器中的漏洞来访问他不知道的文件,则会出现这种情况)

EN

回答 3

Security用户

回答已采纳

发布于 2013-07-23 03:04:52

如果攻击者只能访问“活动”数据库(最常见的是通过SQL注入),那么使用数据库中没有存储的一些秘密对字段进行加密就足够了--即使是应用程序代码或配置文件中的一些硬编码密钥。没有必要使用每个客户的钥匙。

如果您担心攻击者可能以某种方式访问您的web根目录上的数据,但无法访问文件系统的其余部分(如果您的服务器被错误配置为允许浏览其web根内容,则通常情况下),则不会发生任何更改--毕竟,您的服务器代码或配置文件应该在web根目录之外,对吗?(我对PHP几乎没有经验,所以我可能错了)

如果您担心的是攻击者掌握了整个文件系统,那么您应该确保密钥只存在于RAM中。这样做的一种方法是要求在服务器(重新)启动时输入密码,并将派生密钥保存在全局访问的变量中(同样,我不知道PHP是否可行)。可能还有其他选择,但我能想到的任何选项都会引入其他的失败点。1。

我正在考虑在注册时生成证书,并使用证书的部分内存来加密用户的数据。因此,SHA1或MD5足迹可以作为密钥和IV。

使用证书中的任何内容都是个坏主意,因为根据定义,证书是公共的(私有部分永远不会离开用户机器)。如果您可以让用户使用他的私钥解密一些数据( AFAIK目前不被广泛支持,但是可能是在未来),客户端,那么您可能要做一些事情……但是现在的情况是,您可以为每个用户创建一个随机密钥,并让您的应用程序代码(从安全的地方)读取它,并在输入/输出之前将其应用于用户数据。

当然,这假设您需要将一个用户的数据与其他用户隔离开来。如果不是这样的话,一个全局键可能就足够了,正如这个答案的第一部分所描述的那样。

(最后一个注意:您还没有提到您计划使用的加密数据的方法。例如,如果您使用流密码,只为每个用户提供一个IV是不够的--您需要为每个要保护的数据设置一个不同的IV。不管你怎么储存它们,因为它们不应该是机密的,只是独特的。有一些方法可以使单个IV用于加密大量的数据,但这是我目前所不知道的,所以我不会对它们发表意见。)

1:仅举一个例子,您就可以从用户密码派生加密密钥,将其存储在(安全的)会话cookie中,并将其来回传递给服务器和客户端。因为它没有存储在任何地方,所以即使攻击者掌握了整个服务器也无法访问它(当然,假设您的站点是正确的盐类和散列密码,身份验证密钥和加密密钥是相互独立)。对于某些深度防御,您甚至可以将该密钥与仅存储在服务器中的密钥组合起来。明显的缺点是,您的系统安全性现在部分取决于用户浏览器,也取决于服务器和客户端处理会话cookie的方式。

票数 3
EN

Security用户

发布于 2013-07-23 02:12:19

对于编写安全软件,您似乎有一个根本的误解,可能不应该试图以您目前的理解水平来处理您自己的问题。SSL证书对保护DB访问或DB内容没有任何好处。人们不仅几乎肯定能拿到证书,而且对保护你没有任何作用。

为了保护DB,您需要过滤输入以防止SQL注入,使服务器本身变硬,如果需要保护静止的数据,则使用加密,它只需要用密码派生的密钥加密并存储在数据库本身中。

票数 9
EN

Security用户

发布于 2013-07-23 04:36:42

通过利用漏洞或任何其他方法获得对应用程序的访问权限的攻击者是否有可能在以前不知道证书的情况下获得对证书的访问权?

是的,这不仅是可能的,而且是有可能的。您的应用程序可以访问的任何文件,任何接管您的应用程序的人都可以访问。通常,他将能够查看目录列表,执行程序,并做任何正常用户可以做的事情。

票数 4
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/39369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档