从我的理解OUTFILE
和INFILE
启用是非常危险的.任何允许其他人从系统中写入和读取文件的东西对我来说都是危险的,因为我的服务器正在托管一个公共网站.我知道最好的解决方案是使用我的代码来防止SQL注入,但人类有时会犯错误.所以,我想限制我的PHP中使用的用户访问非常有限.如果出现问题,损害将最小化.
如何禁用OUTFILE
和INFILE
?
FILE
与LOAD DATA/INFILE/INTO OUTFILE类型操作相关的用户权限:
"FILE权限允许您使用LOAD DATA INFILE和SELECT ... INTO OUTFILE语句和LOAD_FILE()函数在服务器主机上读取和写入文件.具有FILE权限的用户可以读取服务器上的任何文件主机,它是世界可读的或MySQL服务器可读的....
使用REVOKE来控制FILE privs,来自mysql CLI:
Run Code Online (Sandbox Code Playgroud)#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权限 REVOKE语法 系统变量:secure_file_priv
这个问题是一个很好的例子,说明如何最好地从"拒绝一切,特别是允许"的心态来考虑安全性.与首先授予用户ALL
权限然后有选择地撤销它们相反,我经常看到由于缺乏对mysql中的GRANT/REVOKE系统的熟悉.