私は友人がウェブサイトのモジュールを完成するのを手伝っています。彼のモジュールを見ている私の最初の印象から、私はいくつかの非常に危険なものを見つけましたが、彼はこの方法は安全だと言います。ヌルバイトの脆弱性をテストする
session_start();
if(isset($_POST['foo']))
{
$_SESSION['foo'] = $_POST['foo'];
}
if(isset($_SESSION['foo']))
{
$foo['foo'] = $_SESSION['foo'];
}
if(is_file("inc/". $foo['foo'] . "/bar.php")) {
// code
}
else {
// code
}
注:コードの
パートファイル(INC /試験/ bar.php)が存在します。
私は彼のコードをテストしたかった、と私は、次のリクエストを送った:
POST :: FOO =>テスト/ bar.php%00
POST :: FOO =>テスト/ bar.php \ 0
ますcurl_setopt($ chを、CURLOPT_POSTFIELDS、 'FOO =テスト/ bar.php' CHR($ 00)。);
しかし、これらの方法のいずれも機能しませんでした。そのコードは本当に安全ですか?どのようにして誰かがnullバイトを送信してセキュリティをバイパスすることができましたか?彼のコードが安全でないことを私の友人に実証したい。
私は短いで、あなたのコード はやや脆弱で、消毒方法は、このようです、 this解決策を見つけた
私はPHPの専門家ではありませんので、コメントとして残しておきますが、 "../../"のように渡すことはできません。 ./../ "ファイルシステムへの任意のアクセス権を得るか? –
@ChrisThompson最後に「/bar.php」がありますので、../../../bar.phpをすべて確認します – John
あなたは潜在的にアクセスしている場合に脅威になるので、他の_バー。あなたがアクセスするはずのないphp'ファイル –