インターネットの開発により、登録機能はさまざまなWebサイトやアプリケーションでますます一般的になりましたが、同時に、これは攻撃者がよく使用するエントリポイントになりました。一般的な攻撃方法の1つは、数のスワイプ攻撃です。攻撃者は、自動化されたプログラムを通じて多数のアカウントを登録し、サーバーリソースを消費し、通常のサービスを破壊します。このような攻撃に対処するには、効果的な予防措置を講じることが特に重要です。 PHP登録機能のセキュリティを保護するためのベストプラクティスをいくつか紹介します。
スワイプ攻撃は通常、自動化ツールを使用して登録リクエストをすばやく送信しますが、実際のユーザーは登録を完了するために相互に対話する必要があります。反人間検証を追加することにより、自動登録を効果的にブロックできます。
一般的な反ヒューマン相互作用検証方法には、検証コード、スライド検証、電話番号の確認などが含まれます。GoogleRecaptchaは、機械攻撃の難易度を効果的に高めることができる広く使用されているソリューションです。 Google Recaptchaを登録ページに統合する手順は次のとおりです。
<script src="https://www.google.com/recaptcha/api.js?render=あなたのSite Key"></script> <form method="post" action="register.php"> <!-- ユーザー名、パスワードおよびその彼の登録フィールド --> <div class="g-recaptcha" data-sitekey="あなたのSite Key"></div> <button type="submit">登録する</button> </form> <script> grecaptcha.ready(function() { grecaptcha.execute('あなたのSite Key', {action: 'register'}).then(function(token) { // 意思token彼の登録データでサーバーに送信します }); }); </script>
サーバー側では、Recaptchaの応答を確認する必要があります。以下は確認コードの例です。
<?php $secretKey = "あなたのSecret Key"; $response = $_POST['g-recaptcha-response']; $remoteIp = $_SERVER['REMOTE_ADDR']; $url = "https://www.google.com/recaptcha/api/siteverify?secret=" . $secretKey . "&response=" . $response . "&remoteip=" . $remoteIp; $response_json = file_get_contents($url); $response_data = json_decode($response_json, true); if ($response_data['success'] == true) { // 検証が合格しました,登録操作を実行します } else { // 検証に失敗しました,エラーメッセージを表示します } ?>
刷号攻击往往伴随着大量、快速的注册请求。为了减少这种攻击带来的影响,我们可以对注册请求设置频率限制。
例如,可以记录每个IP地址在一定时间范围内的注册次数,并进行限制。以下是限制注册速度的示例代码:
<?php $ip = $_SERVER['REMOTE_ADDR']; $time_range = 60; // 時間範囲を制限します(2番) $max_register = 5; // 登録の最大数 // データベースまたはその彼のストレージメソッドから入手してくださいIP住所に関連する登録とタイムスタンプの数 // ... if ($register_count >= $max_register) { $remaining_time = $time_range - (time() - $last_register_time); die("登録が多すぎます,お待ちください" . $remaining_time . "2番后再尝试。"); } // データベースまたはその彼のストレージ方法に登録記録を追加しました // ... ?>
数スワイプ攻撃の目的の1つは、他の悪意のある行動に従事するために、多数のアカウントを取得することです。攻撃者が単純なパスワードを使用しないようにするために、ユーザーにより複雑なパスワードを設定させることができます。
たとえば、少なくとも8文字を含むにはパスワードが必要になる場合があり、大文字、小文字、数字、特殊文字を含める必要があります。強力なパスワード要件のコード例は次のとおりです。
<?php $password = $_POST['password']; if (strlen($password) < 8 || !preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[@#$%!^&*()-_=+{}~|/<> ?])。*$/'、$パスワード)){ die( "パスワードが弱すぎるので、より強力いパスワードを選択してください。"); } //ユーザーを登録し、データベースまたはその彼のストレージ方法にパスワードを保存する// ... ?>
要約すると、反ヒューマン相互作用の検証、登録頻度の制限、強力なパスワードの強制などの測定を行うと、登録関数のセキュリティが大幅に改善され、数字攻撃をスワイプすることでサーバーの不必要な負担を防ぐことができます。