2016-07-27 9 views
6

ウェブマスターとして、リスクのあるスクリプトを特定する必要があります。

私は常にユーザ入力をフィルタするPHPコードを書いています。私は決してユーザーの入力を信頼し、有効な文字を選んではいけない(vs一部を拒否する)、PHP固有のフィルタリング機能(filter_input)を使用するか、lib/frameworksユーティリティを使用する。

今日、私はダウンロードしたモジュール内のセキュリティ上の欠陥を検索し、このコードを発見された:

if (isset($_GET['css_file_name'])) {   
    $cssFileName = _PS_MODULE_DIR_ . DS . "xxxx" . DS . "css" . DS . $_GET['css_file_name'] . ".css"; 
    echo file_get_contents($cssFileName); 
} 
echo ""; 

私はそれが安全ではないと思う、それはユーザの入力を信用決して基本的なルールを尊重していません。 私はそれを証明することにしました.DELUX文字を追加して.cssを削除しようとしましたが、任意のファイル(たとえば、資格情報を持つPHPファイル)を見つけることができますが、成功しませんでした。

だから私の質問です:このコードは本当に安全ではありませんか?これでPHPファイルをつかむことが可能です(あなたがそれを証明することができますか?)

+0

私たちが悪用を思いつくことができないなら、それは安全ですか?あなたの質問は面白いですが、セキュリティはもっと考え方であり、安全かどうかは疑問です。これは、安全であることを証明することが難しいため、ホワイトリストがこのケースでは適切であるという明確な兆候です。 – martinstoeckli

答えて

1

可能性のある攻撃は:機能file_get_contentsのNULLバイト中毒は、間違ったファイルの内容を明らかにするか含めることができます。

$ ls 
file.php nullbyte.php 
$ cat file.php 
I am the contents. 
$ cat nullbyte.php 
<?php 
$input = "file.php\0.jpg"; 
echo file_get_contents($input); 
echo "\n"; 
?> 
$ php nullbyte.php 
I am the contents. 

この情報はPHPの古い(サポートされていない)バージョンにのみ関連しています。

ヌルバイト中毒は、PHP 5.3.4で修正されています(これは既にPHPの古いバージョンで、サポートされていません):https://bugs.php.net/bug.php?id=39863。古いPHPバージョンの

可能な修正は:

<?php 
    $clean = str_replace(chr(0), '', $input); 
?> 

しかし、攻撃者があなたの例では、ファイルシステム全体のすべての可能なCSSファイルを一覧表示することができ、それはWebルートから抜け出すことが可能です。