【问题标题】:Where to store key for AES_ENCRYPT in MySQL?MySQL 中 AES_ENCRYPT 的密钥在哪里存储?
【发布时间】:2011-08-02 04:19:24
【问题描述】:

我为 iPhone / iPod Touch 开发了一个应用程序,它必须能够访问 MySQL 数据库。我编写了一个可以从 iPhone 应用程序调用的 PHP API。

在数据库中,我存储了我想要加密的敏感数据。我想我会使用 AES_ENCRYPT。我的问题是在哪里存储密钥。
如果您知道将密钥存储在哪里以加密/解密,这样其他任何人都看不到它,那就太好了,例如黑客。

【问题讨论】:

    标签: iphone mysql ios encryption


    【解决方案1】:

    一般:

    1. 不要将密钥保存在 Web 服务器可以直接访问的服务器部分。例如,如果您的站点位于/var/www/home,请不要将您的密钥放在那里。将它放在树的网络服务器部分之外的某个位置。
    2. 确保正确设置包含您的密钥的文件夹的权限。您的 PHP 应用程序只需要具有读取权限,而不是在该文件夹(和密钥文件)上写入或执行。
    3. 确保服务器本身有一个正确的密码(很长,有很多随机数字、字母和符号)。
    4. 确保服务器受到正确配置的防火墙的保护,并与最新的安全补丁保持同步。

    至于试图将密钥和数据分开——这是一个长期存在的问题,没有很好的解决方案。事情的简单事实是您的应用程序必须有权访问密钥。要么这意味着强制使用该应用程序的每个人记住密钥——这可能会导致在显示器上以普通视图显示便签——要么它必须位于应用程序可以找到它的地方,要么在同一个地方服务器或其他。

    【讨论】:

    • 所以最好的解决方案是密钥存储在另一台服务器上。将密钥存储在 iOS 应用程序中然后每次调用都将密钥提供给 PHP API 是否安全?所以密钥没有存储在任何服务器上?
    • 嗯。那么,您是说在运行您的应用程序的每部 iPhone 上都会有一个密钥副本?我倾向于认为这会让一些恶意的灵魂更容易抓住它。如果由我决定,我会将其与 PHP 代码保存在同一台服务器上,而不是在可公开访问的目录中。
    • 好吧。但是当我使用密钥访问文件时,我必须存储目录的用户和密码才能访问 PHP 代码中的某个位置,不是吗?
    • 您肯定需要在 PHP 中存储目录的路径。通常,您不会使用单独的用户名或密码来访问同一系统上的文件; PHP 实例只会继承 Apache 服务器运行的任何用户(例如 Ubuntu 系统上的 www-data)。
    • 不客气。只要确保服务器具有适当的防火墙和权限即可。此外,请确保您的代码不会受到 SQL 注入攻击;如果人们可以泄露看似合法的 SQL,那么加密数据将无济于事。见:php.net/manual/en/security.database.sql-injection.php
    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2013-02-19
    • 1970-01-01
    • 2016-11-22
    相关资源
    最近更新 更多