那么在验证密码输入时使用$code
会更好吗,或者我只需要使用$_POST['code']
?
在安全方面究竟应该使用secure_input
函数吗?
有没有更好的方法来执行以下密码验证?
有关php form security here
的更多信息<?php
function secure_input($data) {
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$code = secure_input($_POST['code']);
if($code == "ok") echo 'success';
?>
<form method="post" action="">
Name: <input type="text" name="code">
<input type="submit">
</form>
答案 0 :(得分:2)
在安全性方面究竟应该使用secure_input函数吗?
从不。这太可怕了。
$data = stripslashes($data);
- 不要这样做。处理magic quotes问题是很麻烦的。在2018年,你不应该使用甚至支持魔术引号的PHP版本。
$data = htmlspecialchars($data);
- 这样可以安全地将一串文本插入HTML文档中。您没有将值输出到HTML文档中,因此请不要在此处执行此操作。
有没有更好的方法来执行以下密码验证?
您不应以纯文本格式存储密码。它应该被散列,然后是用户输入(当你比较密码而不是密码的 html表示时,它应该是没有任何转义的原始用户输入)应该使用password_verify函数与它进行比较。
PHP有a FAQ about how to handle passwords。
<?php
$submitted_password = $_POST['code'];
$submitted_password = "ok"; # Because this demo doesn't get any POST data
if (password_verify($submitted_password, "$2y$10$76xEMDyKtZEo036w2mQ/zemy3VUDXFhOHRvrljK1F9/6a7rVqlsdi")) {
print "Good password";
} else {
print "Bad password";
}
?>
答案 1 :(得分:-1)
如上所述,您无需转义密码输入以进行比较。
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$authorised = 'secret' == ($_POST['password'] ?? null);
echo $authorised ? 'Credential match.' : 'Credential mismatch.';
}
?>
<form method="post">
Password:<input type="password" name="password">
<input type="submit" value="Authorise me">
</form>
存储密码的哈希可能更明智。
何时应该使用secure_input函数 安全