API を作成したので、それをテストしたいと思います。私はすでにテストを行っていますが、既知の危険なユーザー入力brute forcing
の共通リストを使用して、何らかの形で安全であることを確認したいと考えてい
ます PHP と MySql で記述されています ブルート フォースがここで良い方法であるかどうかについて意見が分かれる方もいるかもしれませんが、しかし、それは追加の安全対策です
2 に答える
OWASP は、あなたの質問に答えることができる非常に優れたチート シートを提供します: https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet
アプリケーションを作成するとき、それを安全にしたいのは明らかです。これは私の懸念でもありました。このために、私は徹底的な調査を行い、PHP Web サイトを保護するのに役立つ情報を収集しました。
PHP アプリケーションのセキュリティに関する考慮事項
- 強力なパスワード暗号化を使用する
a. 強力な暗号化のためにパスワード ソルティングを使用します。
2. ユーザー入力を信用しない。すべての変数、つまり $_POST、$_GET、$_COOKIE、$_SESSION、$_SERVER が汚染されているかのように考えてください。これらの変数に対して適切なフィルタリング手段を使用します。
XSS 攻撃を回避するには、ユーザー入力データをデータベースに挿入する際に、php の組み込み関数 htmlentities、strip_tags などを使用します。[以下の機能 (3) はこの問題を解決します]
カスタム サニタイズ機能を使用して、SQL インジェクションやその他の悪意のあるアクティビティを回避します。
PHP.INI で登録グローバルを無効にする
PHP.INI で「allow_url_fopen」を無効にする
Cookie は盗まれる可能性があるため、機密データを Cookie に保存しないでください。
16 進コード攻撃をチェックします。ユーザー入力をクリーンアップして、16 進コードをフィルタリングします。
9. ユーザーが必要以上のデータを入力できないようにします。最大文字数を許可するように入力を検証します。また、関連するデータ型について各フィールドを検証します。
開発期間後にエラー報告を無効にします。ハッカーに役立つデータベースに関する情報を提供する可能性があります。
ブラウザでファイル拡張子を非表示にします。URL 書き換え技術を使用します。
ログイン システムの場合、X 回のログイン試行の失敗後にユーザーを無効にします。
ログインごとに IP アドレスを記録します。
すべてのログインについて、セキュリティ上の理由から、ユーザーが X 日後にパスワードを変更する必要があるようにシステムを作成します。
管理パネルでは、各ログイン (ログインの失敗、ログインの試行など) についてレポートを利用できる必要があります。注:- これは、システムへのログイン試行が頻繁に失敗する IP を追跡するのに役立ちます。そして、.htaccess を介してそのような IP がシステムにアクセスするのを禁止することができます。
X 分間のアイドル期間後にシステムからユーザーを自動的にログアウトします。
ユーザーがパスワードの変更を要求した場合、ユーザーが以前のパスワードを保持することを拒否します。
サーバーから exec、eval、shell_exec などの php 関数を無効にします。
サーバー ディレクトリ セキュリティ。.htaccess によるディレクトリの一覧表示を無効にします。images、css、documents などの各ディレクトリに index.html ファイルを配置します。
PHP.INIで以下の設定を行います(運用サーバー)
a. a. allow_url_encode を無効にします。Display_errors = オフ c. Log_errors = on d. Log_errors_max_len = 0 e. Ignore_repeated_errors = オフ f. Ignored_repeated_source = オフ g. Track_errors = オフ
- フォームの投稿中に 1 回限りのトークンを使用します。トークンが存在し、フォームの投稿と一致する場合は有効です。それ以外の場合は無効です。
PHP Code : $token = md5 (uniqid (rand (), true)); $_SESSION[“token”] =
> $token;
> HTML Code : <form> <input type=”hidden” name=”token” value=”<?php echo
> $token;?>”> </form>
BUFFER OVERFLOW ATTACK を回避するために入力フィールドの長さを制限します 例:- PHP は高水準言語であり、そのメモリ割り当ては制限されていませんが、1 日の終わりまでにページが実行されると、処理するのは APACHE になります。Apache は C 言語で作成されており、メモリ割り当てに関する厳密な規則があります。入力フィールドの大きなデータは、Apache の動作に影響を与える可能性があります。
各データ型のデータベース フィールドの長さは、実際の要件を超えてはなりません。
ハッカーのポリシー – 「奴らを打ち負かすことができない場合は、シャットダウンする」 例: - アプリケーションにアクセスしているユーザーの IP を確認する必要があります。ハッカーがアプリケーションに侵入して破壊することができない場合、アプリケーションに悪影響を与えようとすることは間違いありません。アプリケーションを無限ループで実行しようとします。これにより、アプリケーションの速度が低下し、サーバーの帯域幅が枯渇し、サーバーがクラッシュすることさえあります。したがって、これらのアクティビティを追跡することで、大量の損失を回避できます..
パフォーマンス上の理由から、不要で未使用の PHP 拡張機能とモジュールを PHP.INI からすべて無効にします。例:- mysql をデータベースとして使用する場合、postgre、sqllite、mssql、および oracle データベース拡張機能を有効にしても意味がありません。
非推奨の PHP 関数は使用しないでください。注:- 非推奨の関数は、PHP チームによってサポートされなくなりました。したがって、非推奨の関数の使用を避けるのが賢明です。
開発者が犯す重大な間違いがあります。例:。編集のためにクエリ文字列でレコード ID を渡すとき、それらが a) 有効である (そのレコードが存在する) こと、および b) レコードがそれを要求したユーザーに属しているか、またはユーザーがそのレコードを表示する権限を持っていることを確認しません。
優れた Web ホスト。注: ほとんどの場合、アプリケーションが安全にコーディングされていても、問題や問題は悪い Web ホストから発生する可能性があります。アプリケーションがリモート サーバーでホストされている場合、セキュリティで定評のある優れた Web ホストを取得することが不可欠です。共有ホスティングにノーと言いましょう。
例: 多くの場合、「私のサイトがハッキングされた」と報告されますが、実際には共有ホスティングが同じサーバー上の別のユーザーに権限の昇格を許可していました。
外部 IP の無効化。アプリケーションを特定の場所からのみ実行する必要がある場合は、この特定の場所以外の IP を無効にします。
ストアド プロシージャの使用 ストアド プロシージャを使用すると、セキュリティが大幅に向上します。それ以外の場合は、生のクエリを使用している場合は、パラメーター化されたクエリを使用します。
アプリケーションのテスト: でたらめな値を入力してアプリケーションをテストします。これは、開発チーム以外の人が行う必要があります。
覚えるポイント。.NET、Java、PHP のいずれを使用する場合でも、セキュリティの問題は選択した言語の問題ではありません。セキュリティの問題は、アプリケーションのプログラム方法に起因する問題です。不適切なプログラミングでは、.NET および Java アプリケーションでさえも同様に脆弱です。
PHP コードの暗号化 IONCUBE (http://www.ioncube.com/) などの暗号化ツールを使用して本番サーバーで PHP コードを暗号化し、PHP コードを不正な変更から保護します。このドキュメントの執筆時点で、IONCUBE の価格は 199 ドルです。
Havij、Acunetix、Netsparker などの利用可能なツールを使用して、アプリケーションの脆弱性をチェックします。また、Web アプリケーションのハッキングの専門家を雇うことは、非常に有益です。