密码输入的安全验证技术

时间:2018-03-27 21:21:12

标签: php forms security post htmlspecialchars

那么在验证密码输入时使用$code会更好吗,或者我只需要使用$_POST['code']

在安全方面究竟应该使用secure_input函数吗?

有没有更好的方法来执行以下密码验证?

有关php form security here

的更多信息

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>

2 个答案:

答案 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函数   安全

请参阅:https://stackoverflow.com/a/4224002/3392762