PHP 会话只使用一个密码字段(没有用户名)?
Posted
技术标签:
【中文标题】PHP 会话只使用一个密码字段(没有用户名)?【英文标题】:PHP Session using only a single PASSWORD field (no username)? 【发布时间】:2011-09-18 06:38:29 【问题描述】:我一直在网上搜索有关创建脚本的好教程,该脚本允许某人使用“输入密码”字段,然后继续允许他们访问某些 php 页面。
我只能找到同时使用用户名和密码的教程(例如this tutorial- 但是我只是在寻找安全的东西,但只使用一个字段进行身份验证。
作为初学者,我唯一的想法是隐藏“用户名”字段,并使用实际用户名的值。但是我不确定这样做有多安全,因为我听说隐藏字段很危险,因为它们可以被利用?
我知道 SQL 注入,所以我希望找到至少足够强大的东西。
【问题讨论】:
您可以省略用户名字段吗?你能给我们看看代码吗? 根本没有用户名字段!将散列密码存储在数据库中,并将用户输入的散列值与存储在数据库中的值进行比较。如果匹配,则允许您访问。 你的意思是你只有一个密码,想让知道的人知道吗? 思南,是的,这正是我想要做的。 【参考方案1】:好吧,不好的地方在于,使用用户名和密码,你必须知道组合,用户密码,只有密码,更容易找到,很多用户只会设置一些愚蠢的密码,比如: 654321 或出生日期之类的。
关于隐藏字段,请避免使用它们,但如果您确实需要它,请改用会话。
【讨论】:
这并没有特别回答这个问题。这似乎很疯狂,但我也有客户要求我提供此功能。我通常告诉他们这是一个愚蠢的想法,然后无论如何都要为他们做。它通常采用注册页面的形式,他们希望客户致电以获取一些“注册代码”,但这与他所询问的概念相同。【参考方案2】:html:
<form action='login.php' method="post">
Password: <input type="password" name="password">
</form>
登录.php
<?php
// this password may come from any source.
// it's a variable for the sake of simplicity
$password = 'verySecretStuff';
if($_POST['password'] == $password)
//handle login
else
// handle no login
?>
【讨论】:
使用 === 运算符也是一个好主意。运算符似乎比 strcmp() 之类的函数快一点。不过这应该不是问题。【参考方案3】:如果您只想使用密码,而不是用户名+密码的组合,您只需在教程中省略用户名部分,因此登录将如下所示:\
<?php
$password = 'unsafepassword1'; // received from a form post or whatever
$password = md5($password);
// Looking if this password is a valid password in the DB
$query = 'SELECT * FROM valid_passwords WHERE password = \''.$password.'\'';
IF(mysql_num_rows(mysql_query($query) == 1)
// user logged in
ELSE
// password was invalid
【讨论】:
【参考方案4】:只需在 HTML 中输入一个内容(根本不需要用户名):
<input type="password" name="password" />
并像往常一样查询数据库,只需要密码:
$password = $_POST["password"];
$result = mysql_query("SELECT password FROM passwords WHERE password='" . some_hash_function($password) . "'");
if(mysql_num_rows($result) > 0)
//There was a match
更新(基于问题的 cmets)
如果您希望只使用一个广为人知的密码就可以访问多个用户,只需将密码存储在您的 PHP 脚本中即可:
$password = "thePassword";
if(strcmp($password, $_POST["password"]))
//Matched
请注意,这不是特别安全...密码以纯文本形式存储在脚本中。但是,由于您似乎希望多个人知道密码,这可能是最简单的选择。我仍然建议使用数据库来存储单个密码。
【讨论】:
以上是关于PHP 会话只使用一个密码字段(没有用户名)?的主要内容,如果未能解决你的问题,请参考以下文章