7

私が理解していることからOUTFILE、有効にしてINFILE有効にすることは非常に危険です。私のサーバーは公開 Web サイトをホストしているため、他の人がシステムからファイルを読み書きできるようにすることは、私にとって危険です。私のコードで SQL インジェクションを防ぐことが最善の解決策であることはわかっていますが、人間は時々間違いを犯す可能性があります。そのため、PHP で使用するユーザーを非常に限られたアクセスに制限したいと考えています。うまくいかなかったとしても、被害は最小限に抑えられます。

無効にする方法OUTFILEINFILE

4

1 に答える 1

8

FILELOAD 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';

または、問題が発生した場合は、特定のデータベースおよびその中の特定のテーブルに対する FILE 操作を選択的に GRANT することができます。

さらに、完全に無効にしない場合は、/tmp などのディレクトリを使用できるように制御をさらに調整し、sysvar_secure_file_privシステム変数を使用してデータファイルのトラバーサルを制限することができます。

これらに固有の詳細については、マニュアルを参照してください: FILE 特権 REVOKE 構文 システム変数: secure_file_priv

この質問は、「すべてを拒否し、特に必要に応じて許可する」という考え方からセキュリティを考えるのが最善であるという良い例です。最初にユーザーALL権限を付与してから選択的に取り消すのではなく、mysql の GRANT/REVOKE システムに慣れていないためによく見かけます。

于 2013-08-11T04:07:42.063 に答える