所以,在验证密码输入时使用$code更好还是我只需要使用$_POST['code']?
在安全性方面,secure_input函数究竟应该在什么时候使用?
是否有更好的方法来执行下面的密码验证?
关于php表单安全这里的更多信息
PhpFiddle
<?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>发布于 2018-03-28 09:53:48
在安全性方面,secure_input函数究竟应该在什么时候使用?
绝不可能。太可怕了。
$data = stripslashes($data); -别这么做.处理魔术引号问题是很困难的。在2018年,您不应该使用PHP版本,它甚至支持神奇的引号。
$data = htmlspecialchars($data); -这使得将文本字符串插入到HTML中是安全的。您没有将值输出到HTML文档中,所以这里不要这样做。
是否有更好的方法来执行下面的密码验证?
不应将密码存储在纯文本中。应该对其进行散列,然后使用验证函数将用户输入(应该是原始用户输入,而不是密码的html表示形式)与之进行比较。
PHP有关于如何处理密码的常见问题。
<?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";
}
?>发布于 2018-03-28 09:32:27
您不需要像上面所概述的那样,为了比较的目的而转义密码输入。
<?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函数究竟应该在什么时候使用?
https://stackoverflow.com/questions/49522604
复制相似问题