1

重複の可能性:
PHPでSQLインジェクションを防ぐための最良の方法

私はPHPを初めて使用します。私はSQLインジェクション攻撃をたくさん聞いた(そして読んだ)。私はPHPコードを書く次の方法に慣れてきました。これがSQL攻撃を受けやすいかどうか誰かに教えてもらえますか?また、SQL攻撃に対してこのコードをどのように改善できますか?

<?php
    if($_POST['submit']){
        $email = protect($_POST['email']);
        $password = protect($_POST['password']);
        $md5password=MD5($password);
        if(!$email || !$password){
            echo '<span style="color: red;" /><center>You need to fill in your <b>User Name</b> and <b>Password</b>!</center></span>';
        }else{
            $res = mysql_query("SELECT * FROM `employer` WHERE `email` = '".$email."'");
            $num = mysql_num_rows($res);
            if($num == 0){
                echo '<span style="color: red;" /><center>The <b>E Mail ID</b> you supplied does not exist!</center></span>';
            }else{
            $res = mysql_query("SELECT * FROM `employer` WHERE `email` = '".$email."' AND `password` = '".$md5password."'");
            $num = mysql_num_rows($res);
            if($num == 0){
                echo '<span style="color: red;" /><center>The <b>Password</b> you supplied does not match the one for that E Mail ID!</center></span>';}else{
                $row = mysql_fetch_assoc($res);
                $_SESSION['uid'] = $row['id'];
                echo "<center>You have successfully logged in!</center>";
                $time = date('U')+50;
                mysql_query("UPDATE `employer` SET `online` = '".$time."' WHERE `id` = '".$_SESSION['uid']."'");
                mysql_query("UPDATE employer (date) VALUES (NOW())");
                header('Location: loggedin_employer.php');
                }
            }
        }
    }
?>
4

1 に答える 1

4

関数の使用をやめる必要がありmysql_*ます。それらは非推奨になっています。代わりに、PDO(PHP 5.1以降でサポート)またはmysqli(PHP 4.1以降でサポート)を使用してください。どちらを使用すればよいかわからない場合は、この記事をお読みください

また、この交換を読んでください:PHPでSQLインジェクションを防ぐにはどうすればよいですか?

于 2012-08-16T13:31:54.753 に答える