PHPのescapeshellcmd関数とescapeshellarg関数の違いについて解説します。
主な違い
escapeshellarg(): 引数全体をシングルクォートで囲み、内部のシングルクォートをエスケープ- 用途: コマンドの引数を安全に渡す
- 例:
'my file.txt'→'my file.txt'
escapeshellcmd(): シェルのメタ文字(;,|,&,`,$など)をバックスラッシュでエスケープ- 用途: コマンド文字列全体を保護
- 例:
echo hello; rm -rf /→echo hello\; rm -rf /
重要な注意点
- 両方を同時に使用しない:
escapeshellcmd(escapeshellarg())は脆弱性を生む可能性 - 推奨: 引数には
escapeshellarg()のみ使用 - 最も安全:
proc_open()や配列形式で引数を渡す方法
