据我所知,启用OUTFILE
和INFILE
非常危险。任何允许其他人从系统中写入和读取文件的东西对我来说都是危险的,因为我的服务器正在托管一个公共网站。我知道最好的解决方案是使用我的代码来防止SQL注入,但人类有时会犯错误。所以,我想限制我的PHP中使用的用户访问非常有限。如果出现问题,损害将最小化。
如何停用OUTFILE
和INFILE
?
答案 0 :(得分:8)
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';
或者,如果遇到问题,您可以选择性地对特定数据库及其中的特定表格进行文件操作。
此外,如果没有完全禁用,您可以进一步调整像/ tmp这样的目录上的控制允许,限制使用sysvar_secure_file_priv
系统变量遍历数据文件。
有关这些内容的更多信息,请参阅手册: FILE Privilege REVOKE Syntax System Variable: secure_file_priv
这个问题是一个很好的例子,说明如何最好地从“拒绝一切,特别是允许”心态来考虑安全性。而不是首先授予用户ALL
权限,然后有选择地撤销它们,我经常看到这是因为他们对mysql中的GRANT / REVOKE系统缺乏了解。