尝试使用php构建安全登录
我需要在php中为当前项目实现一些安全登录。 我用pdo编写的语句编写了一些东西,其中考虑了旧代码。我需要一些建议来实现更安全的攻击,或者检查它是否能够抵御SQLINJ攻击尝试使用php构建安全登录,php,pdo,Php,Pdo,我需要在php中为当前项目实现一些安全登录。 我用pdo编写的语句编写了一些东西,其中考虑了旧代码。我需要一些建议来实现更安全的攻击,或者检查它是否能够抵御SQLINJ攻击 <form action="validate.php" method=post> <table class="loginForm"> <thead></thead> <tbody> <tr>
<form action="validate.php" method=post>
<table class="loginForm">
<thead></thead>
<tbody>
<tr>
<td>UserName:</td>
<td><input name=user_name></td>
</tr>
<tr>
<td>Pass:</td>
<td><input type=password name=password></td>
</tr>
<tr>
<td><input class=loginBtn type=submit value='Log me in' name=login></td>
</tr>
</tbody>
</table>
</form>
更新:
感谢下面接受的答案,我的问题现在是这样编码的
$STH = $DBH->prepare('SELECT * FROM Admins
WHERE username = :user and password = :pass');
$STH->execute(array(':user' => $_POST['user_name'],
':pass' => $_POST['password']));
这很好。
现在我只想确定我的身份验证是否足够好,可以在这样的管理页面上使用它
会话_start()
试试看{
$host='xx';
$dbName='xxxx';
$dbUser='xxxxx_first';
$dbPass='xxx';
#使用PDO_-MySQL的MySQL
$DBH=newpdo(“mysql:host=$host;dbname=$dbname”,$dbUser,$dbPass);
$DBH->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
}捕获(PDO$e){
echo“恐怕我做不到。”;
文件内容('pdorers.txt',$e->getMessage(),文件附加);
}
if(空($\u会话['username'])){
要访问页面,您必须登录。
');
}
您可以这样键入查询以避免Sql注入
$STH = $DBH->prepare('SELECT * FROM Admins
WHERE username = :user and password = :pass');
$STH->execute(array(':user' => $_POST['user_name'],
':pass' => $_POST['password']));
您的代码:
$DBH->prepare("SELECT * FROM `Admins` WHERE `username` = '$user_name' AND password='$password'");
准备好的语句(本身)不能防止SQL注入。您需要绑定参数。签出:
在上面的示例中,SQL注入是完全可能的。我看不到您在哪里定义
$user\u name
或$password
,因此我无法确定它是否安全。您是否使用https将表单发送到服务器?也许这有助于我认为您将密码存储在纯文本中-您应该散列它们,使用SHA1。@将任何代码示例或指向shareSet$secret的链接作为站点范围的随机字符串添加到半文本中。然后存储sha1($username.$password.$secret)
当您执行用户插入操作时,以及当您检索密码时,请确保sha1($username.$enteredPassword.$secret)==$databasePassword
。这些查询是sql inj。安全吗?
$STH = $DBH->prepare('SELECT * FROM Admins
WHERE username = :user and password = :pass');
$STH->execute(array(':user' => $_POST['user_name'],
':pass' => $_POST['password']));
$DBH->prepare("SELECT * FROM `Admins` WHERE `username` = '$user_name' AND password='$password'");