据我了解,拥有OUTFILE
和INFILE
启用是非常危险的。任何允许其他人从系统中写入和读取文件的东西对我来说都是危险的,因为我的服务器正在托管一个公共网站。我知道最好的解决方案是用我的代码防止 SQL 注入,但人类有时会犯错误。因此,我想将我的 PHP 中使用的用户限制为非常有限的访问权限。如果出现问题,损失将降到最低。
如何禁用OUTFILE
和INFILE
?
据我了解,拥有OUTFILE
和INFILE
启用是非常危险的。任何允许其他人从系统中写入和读取文件的东西对我来说都是危险的,因为我的服务器正在托管一个公共网站。我知道最好的解决方案是用我的代码防止 SQL 注入,但人类有时会犯错误。因此,我想将我的 PHP 中使用的用户限制为非常有限的访问权限。如果出现问题,损失将降到最低。
如何禁用OUTFILE
和INFILE
?
FILE
与 LOAD DATA/INFILE/INTO OUTFILE 类型操作相关的用户权限:
“FILE 权限允许您使用 LOAD DATA INFILE 和 SELECT ... INTO OUTFILE 语句以及 LOAD_FILE() 函数读取和写入服务器主机上的文件。具有 FILE 权限的用户可以读取服务器上的任何文件世界可读或 MySQL 服务器可读的主机....
使用 REVOKE 从 mysql CLI 控制 FILE privs:
#change to mysql system db use mysql; #use the REVOKE (opposite of GRANT) to disable any FILE operations #in all dbs for the specific user/host. use % to block all hosts. REVOKE FILE on *.* FROM 'specificuser'@'specifichostname';
或者,如果遇到问题,您可以选择性地 GRANT 对特定数据库以及其中特定表的 FILE 操作。
此外,如果没有完全禁用,您可以进一步调整控制允许使用 /tmp 之类的目录,从而限制使用sysvar_secure_file_priv
系统变量遍历数据文件。
有关特定于这些的更多信息,请参阅手册: FILE Privilege REVOKE Syntax System Variable:secure_file_priv
这个问题是一个很好的例子,说明如何最好地从“拒绝一切,特别是根据需要允许”的心态来考虑安全性。与首先授予用户ALL
权限然后有选择地撤销它们相反,由于不熟悉 mysql 中的 GRANT/REVOKE 系统,我经常看到这种情况。