-5

我有这个 PHP 登录代码(我从这里的另一个问题中借来的)——我可以很容易地用 SQL 注入破解它,并希望它更安全——有点开发新手,需要一些帮助!如何阻止此类攻击?谢谢!

$userinfo = array(
                'user1'=>'password1',
                'user2'=>'password2'
                );

if(isset($_GET['logout'])) {
    $_SESSION['username'] = '';
    header('Location:  ' . $_SERVER['PHP_SELF']);
}

if(isset($_POST['username'])) {
    if($userinfo[$_POST['username']] == $_POST['password']) {
        $_SESSION['username'] = $_POST['username'];

    }else {
        //Invalid Login
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Login</title>
    </head>
    <body>
        <?php if($_SESSION['username']): ?>
            <p>You are logged in as <?=$_SESSION['username']?></p>
            <p><a href="?logout=1">Logout</a></p>
        <?php endif; ?>
        <form name="login" action="" method="post">
            Username:  <input type="text" name="username" value="" /><br />
            Password:  <input type="password" name="password" value="" /><br />
            <input type="submit" name="submit" value="Submit" />
        </form>
    </body>
</html>
4

1 回答 1

1

上面代码的一些提示问题

如果你有一些$_POST['username']不是数组中的键的东西,这会返回什么?

$userinfo[$_POST['username']] 

如果您没有在 POST 请求中指定任何密码,这会返回什么?

$_POST['password']

提示:它们是一样的,不管它们是什么......

并澄清一下:这不是SQL 注入。只是简单地利用一个愚蠢的程序。

于 2013-10-09T11:20:48.180 回答