如何使用jquery和php验证密码? - php

我以前从未做过,而且在Google或StackOverflow上也找不到很多帮助。

这是我所拥有的:密码输入:

<input type="text" placeholder="password" name="pass" id="password" />

和一些jQuery来检查密码:

<script>
$('form').submit(function(){
input = $('#password').val();
var finish = $.post("pass.php", { request: "opensesame" }, function(data) {
   return (input==data) ? true : false;
});
if(finish){
alert('sent');
}else{
alert('not sent');
}
return false;
});
</script>

和一个分配密码的php页面(pass.php):

<?php
if(isset($_POST['request'])&&$_POST['request']=="opensesame"){
echo 'graphics';
}
?>

现在,我可以用它来警告“图形”,但是我不能用它来将数据与输入值进行匹配以检查它是否是正确的密码。

我在做什么错,以这种方式认证密码的潜在危险是什么?

参考方案

要做的第一件事就是清理代码,恐怕它太晦涩难懂了。

我将其编写如下:

<script>

$('form').submit(function(event){
    event.preventDefault(); // stop the form from submitting
    var passwd = $('#password').val();
    var finish = $.post("pass.php", { request: passwd }, function(data) {
        if(data){
            alert('Success!');
        }else{
            alert('Failure :(');
        }
    });
});

</script>

这里要注意的事情:

AJAX POST是异步的,您无法在回调中更改变量后立即检查变量,而需要在回调中处理内容。
您必须在服务器上而不是在javascript中验证密码!
除了前一个项目符号外,请勿在javascript内输入密码!

在服务器上:

<?php

    if(isset($_POST['request']) && $_POST['request']=="opensesame"){
        echo 'true';
    }else{
        echo 'false';
    }

?>

这里要注意的事情:

您使用isset()来检查变量的存在,良好的调用。继续做。
jQuery POST期望来自服务器的javascript值(除非另行说明)。
这就是为什么我的代码显示'true''false'的原因,这会在JavaScript中转换为布尔值。
我建议返回一个包含错误详细信息的对象,例如以下内容:

<?php
    $result = array('success'=>false, 'reason'=>'Unknown error.');
    if(isset($_POST['request'])){
        if(trim($_POST['request'])!=''){
            if($_POST['request']=='opensesame'){
                $result['success'] = true;
                $result['reason'] = 'Welcome home!';
            }else $result['reason'] = 'Password is wrong';
        }else $result['reason'] = 'Password must not be empty';
    }else $result['reason'] = 'Expected parameter "request"';
    echo json_encode($result);
?>

PHP:将数组值加在一起 - php

我相信这比标题听起来要难一些,但我可能完全错了。我有一个像这样的数组:[["londrina",15],["cascavel",34],["londrina",23],['tiradentes',34],['tiradentes',21]] 我希望能够采用通用…

PHP JQuery复选框 - php

我有以下片段。 var myData = { video: $("input[name='video[]']:checked").serialize(), sinopse: $("#sinopse").val(), dia: $("#dia").val(), quem: $(&#…

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…