Javascript加密在POST之前传递

时间:2015-05-19 10:23:18

标签: javascript html encryption

我在按下提交按钮时尝试加密密码。

我不明白为什么密码输入的值没有改变,ecryption正确完成。

<script>
    function cript(){
        var pass = CryptoJS.SHA1("<?php echo $_POST["password"]; ?>");

        var passString = pass.toString();

        console.log(passString);
        document.getElementById('inputPassword').value = passString;
    }
</script>

并在HTML表单上:

<input type="submit" class="btn btn-primary" value="Proceed" onclick="cript()">

有谁能告诉我解决方案?

3 个答案:

答案 0 :(得分:6)

JavaScript在浏览器中执行。 PHP在服务器上执行。您编写的代码无法正常工作,因为它会尝试在浏览器中执行它们。

    首先执行
  1. "<?php echo $_POST["password"]; ?>",而在服务器上构建页面。此时,密码可能不存在于服务器上,因此javascript中的值很可能是空白的。

    "<?php echo $_POST["password"]; ?>"变为""

  2. 当javascript在浏览器中加载时,它实际上是var pass = CryptoJS.SHA1("");。您可以使用调试器(如firebug)或使用ZED等代理进行验证,也可以通过在浏览器中查看页面源来验证。执行此操作时,它不会进行任何哈希处理,因此不会在密码字段中存储任何内容。

  3. 发布时,密码字段为空,因为#2。您的服务器什么都没有,所以您的密码不会改变。

  4. 顺便说一下,

    • 不要在客户端上哈希密码。这意味着存在安全漏洞,您可能会在登录过程中对密码进行哈希处理。您似乎可以保护数据不被不安全地发送到服务器,但您实际上只是将密码哈希变为密码。当密码哈希被盗时,攻击者将能够重放它,就像他们能够重放原始密码一样。
    • 您忘记在密码中加入盐,这使您容易受到彩虹表的影响。
    • 请勿使用sha1进行散列密码。它有点弱,预计任何一天都会下降。使用bcrypt或pbkdf2
    • 不要将其称为加密密码&#39;但是要记下密码&#39;。虽然哈希在技术上是一种加密技术,但使用不恰当的词语都会掩盖你的经验并传达你想要的不同信息,使得理解加密的人必须更加努力地理解你的问题来帮助你。
      • 使用&#39;加密&#39;和&#39;解密&#39;指可逆加密。
      • 使用&#39; crypt&#39;引用任何人都不应该使用的旧的弱unix算法。
      • 使用&#39;哈希&#39;或&#39;数字指纹&#39;提到哈希。

答案 1 :(得分:1)

调用cript之前的表单帖子。

在表单的cript事件中调用onsubmit函数:

<form onsubmit="cript()">

答案 2 :(得分:1)

您的PHP代码无法在点击时执行。它只能在加载文件时由服务器执行,因为您正在等待用户输入密码然后调用它不起作用的功能。

您的javascript var pass为空,因为您此时没有POST。

可行的流程是: 执行PHP - &gt;提供html + javascript - &gt;用户输入 - &gt;地穴 - &gt;提交

因此,在这种情况下,您不能依赖PHP为您提供数据。你需要在这里采用不同的方法。

尝试

<script>
    function cript(){
        var pass = CryptoJS.SHA1(document.getElementById('inputPassword').value);

        var passString = pass.toString();

        console.log(passString);
        document.getElementById('inputPassword').value = passString;
    }
</script>
  

这只会解决与尝试传递PHP相关的问题   变量到javascript变量。有关SHA1的安全问题是   另一个话题,如果这是学校项目或摆弄   学习javascript然后就可以了。这个例子用于学习目的如何   使用javascript访问元素中的值是可以的。但是,如果这样   代码将被放在服务器上并被使用,然后SHA1应该   绝对要避免