web-dev-qa-db-ja.com

LFIの脆弱性にパッチを適用する方法

私はあなたがこの脆弱性を知っていると確信していますが、これにパッチを適用する方法はありますか?私はこのコードをチュートリアルで見ましたが、これはこれにパッチを適用する方法ですが、ユーザーは現在のディレクトリのすべてのファイルにアクセスできます。

<?php
$page = $_GET['page'];
if(@strstr($page,'../')){
    die('LFI Attempt Detected');
}
include($page);
?>

この脆弱性にパッチを当てる良い方法を提案してください。

1
Rehan Manzoor

提示された緩和策は絶対に不十分です。現在のディレクトリからだけでなく、ファイルシステムに応じて任意のディレクトリからファイルを含めることも可能です(つまり、\..はWindowsでも機能します)、または絶対パス(例:/… on Unixライクなシステム、またはWindowsの\…)と同様に、異なる protocols/wrappers (例:http://…file://…ftp://…など) 。)、任意のPHPコードの実行を許可します。

これが必要ない場合は、パラメーター値を検証する必要があります。たとえば、特定の値のみを許可する場合は、配列を使用して、指定された値がその中にあるかどうかを確認します。

$validValues = array();
if (!in_array($page, $validValues, true)) {
    die("invalid 'page' value");
}

特定のディレクトリ内のファイルを許可したい場合は、結果の絶対パスが PHPのディレクトリトラバーサルの防止

4
Gumbo

入力を制限します。含めることができるファイル名の配列を使用するか、その単一の名前を使用してそれに制限することができます。パッチコードは次のようになります(まだテストしていません)

 $allowed_includes = array('config', 'index','register'); //list of files that are allowed to be included if //

(in_array($ _ GET ['file']、$ allowed_includes)){//ユーザーが指定したファイルが配列に存在する場合
include_once($ _ GET ['file']。 '.php'); //名前を含め、.php拡張子を追加し、ファイルを含めます。 }

0
Haider Qureshi