密码输入的安全验证技术
Secure validation technique on password inputs
那么在验证密码输入时使用 $code
更好还是我只需要使用 $_POST['code']
?
在安全方面,什么时候应该使用 secure_input
函数?
是否有更好的方法来执行以下密码验证?
更多关于 php 表单安全 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>
如上文所述,您无需出于比较目的对密码输入进行转义。
<?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>
存储密码的哈希值可能更明智。
When exactly should the secure_input function be used when it comes to
security?
参见:
When exactly should the secure_input function be used when it comes to security?
从来没有。这太可怕了。
$data = stripslashes($data);
— 不要这样做。处理 magic quotes 问题是 hack。在 2018 年,您不应该使用甚至支持魔术引号的 PHP 版本。
$data = htmlspecialchars($data);
— 这样可以安全地将文本字符串插入到 HTML 文档中。您没有将值输出到 HTML 文档中,所以不要在此处执行此操作。
Is there a better way to perform the below password validation?
您不应以明文形式存储密码。它应该被散列,然后是用户输入(这应该是原始用户输入,没有任何转义,因为你正在比较 password 而不是 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, "yxEMDyKtZEo036w2mQ/zemy3VUDXFhOHRvrljK1F9/6a7rVqlsdi")) {
print "Good password";
} else {
print "Bad password";
}
?>
那么在验证密码输入时使用 $code
更好还是我只需要使用 $_POST['code']
?
在安全方面,什么时候应该使用 secure_input
函数?
是否有更好的方法来执行以下密码验证?
更多关于 php 表单安全 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>
如上文所述,您无需出于比较目的对密码输入进行转义。
<?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>
存储密码的哈希值可能更明智。
When exactly should the secure_input function be used when it comes to security?
参见:
When exactly should the secure_input function be used when it comes to security?
从来没有。这太可怕了。
$data = stripslashes($data);
— 不要这样做。处理 magic quotes 问题是 hack。在 2018 年,您不应该使用甚至支持魔术引号的 PHP 版本。
$data = htmlspecialchars($data);
— 这样可以安全地将文本字符串插入到 HTML 文档中。您没有将值输出到 HTML 文档中,所以不要在此处执行此操作。
Is there a better way to perform the below password validation?
您不应以明文形式存储密码。它应该被散列,然后是用户输入(这应该是原始用户输入,没有任何转义,因为你正在比较 password 而不是 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, "yxEMDyKtZEo036w2mQ/zemy3VUDXFhOHRvrljK1F9/6a7rVqlsdi")) {
print "Good password";
} else {
print "Bad password";
}
?>