0

私はPHP/SQLiteセキュリティゲーム全体に非常に慣れていません。インジェクション攻撃や PHP_SELF ベースの脅威などから保護する方法がわかりません。誰かが私の 55 行のサインイン ページを調べて、私が持っている可能性のあるセキュリティ ホールを指摘できますか? とても感謝しております。

<?php
// Begin Redirector ******************************************************************************************
if (isset($_COOKIE["session"])) { header("location:http://pagesnap.tk/"); }
// End Redirector ******************************************************************************************

else
{
?>
    <html>
        <head>
            <title>Sign In - PageSnap</title>
        </head>
        <body>
            <h1>PageSnap</h1>
            <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
                <input name="username" type="text" placeholder="Username "/>
                <br />
                <input name="password" type="password" placeholder="Password" />
                <br />
                <br />
                <input name="signin" type="submit" value="Sign In" />
            </form>
        </body>
    </html>
<?php
    if ($_POST["signin"]) // If Form Is Submitted
    {
        // Variables
        $username = $_POST["username"];
        $password = $_POST["password"];
        $password = hash("sha512", $password);

        // Database Connection
        $database = new PDO("sqlite:database.sqlite");

        // Entry Finder
        $result = $database -> query("SELECT COUNT (*) FROM accounts WHERE username = '$username' AND password = '$password'");

        // Success
        if ($result -> fetchColumn() > 0)
        {
            $id = $database -> query("SELECT id FROM accounts WHERE username = '$username' AND password = '$password'");
            $id = $id -> fetchColumn();
            setcookie("session", "$id", time()+3600);
            header("location:http://pagesnap.tk/");
        }

        // Failure (Entry Not Found)
        else
        {
            echo "You have entered your username or password incorrectly.";
        }
    }
}
?>

どうもありがとうございました!

4

1 に答える 1