Mysql加密/存储敏感数据,

时间:2017-05-07 16:27:11

标签: php mysql security encryption

我的PHP网站有以下内容:

  • 启用SSL
  • Cookies:

    session_set_cookie_params($cookieParams["lifetime"], 
    $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
    
  • 传输密码SHA512,然后是password_hash(),最后是PASSWORD_BCRYPT

  • Mysqli准备好的陈述
  • 在INSERTING / UPDATE进入Mysql
  • 时输入所有已清理的内容
  • htmlentities等。尽可能避免使用xss。

我现在正在寻求使用AES_Encrypt函数来加密敏感数据,方法是在Webroot目录之外存储加密和解密的$ key。

这可能会存储患者数据,我现有的数据是否足够安全?

问题:

  

INSERT / UPDATE时如何清理输入?如果您正在使用预备语句,则也不应手动转义数据。

答案:
例如:

  $firstname = ucwords(filter_input(INPUT_POST, 'firstname', FILTER_SANITIZE_STRING));

1 个答案:

答案 0 :(得分:8)

我一直都明白不使用 MySQL内置的加密功能,因为静态数据(在SQL中)的加密点是,如果服务器被泄露,数据不是那么大的风险。

MySQL内置功能的问题在于,它不适用于何时将数据传递给" at rest "状态,因此任何数据的明文都可以记录在MySQL日志中(以及存储系统上的其他位置,例如查询查找未加密,因此您可以在多次查找和count结果推导列值之前)/之前它是加密的。 You can read more about this here

  

关于加密,您应该使用一些久经考验的库,例如defuse/php-encryption

从我自己对此主题的研究中所读到的内容,Magnus提供给defuse/php-encryption的链接是阻止MySQL导致您破坏数据的最好方法之一,从不放过MySQL程序/服务器曾经看到你的数据的明文值。