代码之家  ›  专栏  ›  技术社区  ›  Gragas Incoming

密码输入的安全验证技术

  •  1
  • Gragas Incoming  · 技术社区  · 7 年前

    那么使用它更好吗 $code 验证密码输入时,或者我必须使用 $_POST['code'] ?

    什么时候 secure_input 当涉及到安全性时,应该使用什么功能?

    是否有更好的方法执行以下密码验证?

    有关php表单安全的详细信息 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 回复  |  直到 7 年前
        1
  •  2
  •   Quentin    7 年前

    在安全方面,什么时候应该使用secure\u输入功能?

    从不这太可怕了。

    $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";
        }
    
    ?>
    
        2
  •  -1
  •   Progrock    7 年前

    如上所述,您不需要为了进行比较而逃避密码输入。

    <?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>
    

    存储密码哈希可能更明智。

    当涉及到 安全

    见: https://stackoverflow.com/a/4224002/3392762