所以我目前正在构建一个使用PHP作为Web服务的应用程序,该服务随后与我存储数据的数据库进行通信。我已选择采用这种方式,因为我将有一个与数据库通信的前端应用程序,并将进行分发,我不希望在其中包含任何敏感的连接数据。截至目前,这是我的应用程序的工作方式:
1)客户端应用程序将数据打包为JSON,并通过AJAX将其发送到外部PHP Web服务。
2)PHP Web服务接收请求并验证它。通过检查通过查询字符串提供的正确参数来完成此验证,传递的JSON字符串是有效的JSON,json_decoded JSON对象中的属性与我期望的JSON对象具有相同的名称。 ,并且每个属性的值类型都是我期望的JSON对象的正确类型。
3)如果JSON有效,则PHP连接到数据库并调用与输入参数对应的存储过程。连接数据保存在单独的config.php文件中,并包含在Web服务中。
4)如果数据库调用成功,则通过JSON将任何相关数据返回给调用者。发生的任何错误都将终止线程并将错误返回给客户端。
现在,有了这种架构,是否有任何人看到的尖叫漏洞?为了更好地保护连接数据(因为这主要是我想让用户隐藏的内容),我正在考虑做以下事情:
- 在我选择的基础中编码config.php中的数据,然后在连接到数据库时对其进行解码。
- 验证服务和配置文件。
这在保护我的连接值方面听起来不够吗?除了config.php文件之外,还有更好的方法来存储敏感连接数据吗?有没有办法让某人轻松访问包含敏感数据的.php文件?我们非常感谢你们所有关于如何进一步保护这个应用程序免受攻击的建议。
致以最诚挚的问候,
答案 0 :(得分:2)
您可以使用PHP OpenSSL库来加密配置文件中的敏感数据(而不是通过默认使用安全性)。首先使用OpenSSL生成PKCS#12证书,然后创建一个PHP页面,该页面使用OpenSSL库导入该证书并加密一个部分或整个配置文件。然后从连接到数据库的PHP代码中再次导入该证书,并解密敏感配置数据,然后使用它连接到数据库。根据要加密的数据大小,您可能必须使用AES封装数据,然后使用RSA密钥加密AES密钥。对于每个人来说实现这一点都变得有点复杂,我想我会为此编写一个库,谢谢你的想法。
除此之外,看起来你有一些非常好的安全性。答案 1 :(得分:2)
从服务器的角度来看......
如果您的数据库位于单独的服务器上(我建议使用) - 请将防火墙锁定为仅接受来自Web服务器的请求。
您基本上只允许从Web服务器的IP访问端口3306。如果您使用的是Amazon Web Services,则此配置非常容易设置。
这样即使有人获得了登录凭据,您也会有另一个进入障碍。
另外,我确保你不是在共享主机上,为拥有良好SLA的信誉良好的托管服务提供商的网络服务器获得一个不错的专用服务器。