私はPHPを使い始めており、独自のログイン/登録スクリプトを作成することで、ある程度の露出が得られると思いました。しかし、私が見ているすべての投稿は、次のようなものを引用しています
「あなたはセキュリティの専門家ではないので、これを試みるべきではありません」
私はそれを試みるべきですか?もし私がお勧めしないのなら、あなたは何をお勧めしますか?
自分で何かを試すのは悪いことではありません。ログイン/登録コードが利害関係者を危険にさらす立場にない限り (金銭的に?)、その過程でセキュリティについて 1 つまたは 2 つのことを学ぶことができます。
appsec (アプリケーション セキュリティ) の世界を始めるためのドキュメントを次に示します。
XSS の脆弱性: https://www.owasp.org/index.php/Cross-site_Scripting_(XSS )
CSRF の脆弱性: https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF )
SQL インジェクション: https://www.owasp.org/index.php/SQL_Injection
ログインと登録のシステムは、おそらくセッション処理で実行できる最も基本的なことなので、間違いなく良い考えです。ただし、最初はユーザー名(パスワードなし)のログインのみを使用することをお勧めします。パスワードは扱いにくいビジネスであり、パスワードを保護しないと深刻な影響を与える可能性があります。ユーザー名のみを取得するログインシステムを試して、暗号化について学習したらパスワードを追加する方が安全です。
「知るだけでは十分ではありません。適用する必要があります」 - ブルース・リー
適切なセキュリティ プラクティスは、実際の状況に適用することによってのみ習得できます。
セキュリティで保護されたログイン ページと登録ページの作成は、次のように簡単です。
適切な DB テーブル構造を取得します。たとえば、テーブル ユーザー列のユーザー名、名前、パスワード、電子メールなどです。
ユーザー入力の取得
ネイティブの mysql データベース ドライバーを使用している場合、SQL インジェクションを防ぐためにユーザー入力をサニタイズします。しかし、もっと良いのは、準備済みステートメント、MySQLi、または PDO などの抽象化レイヤーについて独学して、移植性を容易にすることです。
パスワードをハッシュします。パスワードをプレーンテキストで保存しないでください ただし、パスワードをハッシュする前にまずソルトします。ハッシュ != 暗号化 に注意してください。ハッシュは実質的に元に戻すことができません (ただし、理論的には元に戻すことができ、Crc32 のように非常に衝突しやすいものもあります。ハッシュは、たとえばMD5、SHA256、SHA512、 Bcrypt のように強度の高い順に並べられます。
次に、これらの値を格納するクエリを作成します。ユーザー名列が一意に設定されていることを確認してください。2 人のユーザーが同じユーザー名を持つことはできません。
ログイン時:
- ユーザーとパスワードの組み合わせが正確であることを確認します。
- パスワードについては、登録時に元のパスワードを渡したのと同じソルト ハッシュ アルゴリズムを介して渡します。
-セッション変数を設定して、ユーザーを追跡し、オンラインであることを確認できるようにします。