Php 是否可以在MySQL常规/慢速查询日志中隐藏密码?

Php 是否可以在MySQL常规/慢速查询日志中隐藏密码?,php,mysql,security,aes,Php,Mysql,Security,Aes,有时我查看MySQL日志,偶然发现一些请求以明文形式显示密码 如果我在PHP中创建日志,我将能够访问它们 但那又如何呢。它们是一个可用的选项,还是可以设置一个不会保存在日志中的mySQL变量?不幸的是,我知道没有办法禁用单个语句的mySQL日志记录。MySQL文档建议出于以下原因保护日志: 从 从MySQL 5.6.3开始,密码在语句中写入通用 查询日志由服务器重写,不会以明文形式出现 文本。可以抑制常规查询日志的密码重写 通过使用--log raw选项启动服务器。此选项可能是 用于诊断目的,将

有时我查看MySQL日志,偶然发现一些请求以明文形式显示密码

如果我在PHP中创建日志,我将能够访问它们


但那又如何呢。它们是一个可用的选项,还是可以设置一个不会保存在日志中的mySQL变量?

不幸的是,我知道没有办法禁用单个语句的mySQL日志记录。MySQL文档建议出于以下原因保护日志:

从MySQL 5.6.3开始,密码在语句中写入通用 查询日志由服务器重写,不会以明文形式出现 文本。可以抑制常规查询日志的密码重写 通过使用--log raw选项启动服务器。此选项可能是 用于诊断目的,将语句的确切文本视为 已由服务器接收,但出于安全原因,不建议这样做 供生产使用

在MySQL 5.6.3之前,语句中的密码不会被重写,并且 应保护常规查询日志。见第6.1.2.2节, “”

不幸的是,(从5.6.3开始)内置的反密码日志只适用于MySQL password()函数

我看到了一些解决您问题的可能方法:

  • 对于每个查询:禁用日志、执行查询、启用日志
  • 在应用程序本身中散列密码(在您的例子中是php sha)
  • 保护日志文件,这样就没人能看到这些声明了
  • 登录到删除密码本身的应用程序

  • 您在哪里找到它仅适用于PASSWORD()的信息?这听起来像是一个没有完整性保证的示例列表(创建用户、授予、设置密码、密码)。第五个选项-安排一个cron作业来运行
    file\u put\u contents('/log\u file\u path',preg\u replace('\b(AES(?:EN\124; DE)CRYPT)\s*(.s*([\'^'])(.+?)\2\s*)\s*\)\b\35i','$1($2*****$2'),file\u contents(/log path')
    我也希望看到一个权威的声明来源,它只适用于
    PASSWORD()
    -我至少希望它也能用于
    设置密码
    查询-但是,@mgutt我怀疑它不能用于
    AES_ENCRYPT
    /
    AES_DECRYPT
    ,因为它们不仅仅用于密码,它们是通用的加密函数。@DaveRandom确实更好地描述了我的意思:MySQL只会不记录密码密码,当它知道它正在使用密码,如密码,创建,授予,…-我怀疑AES*功能将不会被记录。