在Javascript和amp;之间混淆POST变量PHP

时间:2011-06-24 17:27:04

标签: php javascript encryption

理想情况下,我想加密变量,所以没有办法解决它们,但是假设客户端将通过javascript发送变量,并且如果他们看到代码可以解密任何东西,我正在寻找替代方案。

我正在考虑使用能够返回类似于md5或sha1的HEX的东西但加密然后将一些服务器时间或日期合并到变量中,以便加密仅在1-2分钟内有效。

javascript将具有混淆/最小化的功能,该功能将根据javascript将加密时间基于,然后将其发布到php。只要服务器的日期/时间为X分钟,它就会正确解密。

我想发送它似乎是随机数据,并找回似乎是随机数据。我不希望它是相同的数据。

这是最好的方法吗?我只是试图阻止那些尝试使用HTTP嗅探器的人。我知道一旦他们进入javascript源,没有什么可以阻止它给予足够的时间/了解正在发生的事情。

如果您要发布实际代码,请记住函数/功能应该存在于javascript和PHP5(< 5.3)上。我希望原生的简单/小函数不会为JS和PHP实现一个巨大的第三方类。

编辑:SSL / HTTPS是不可能的。

4 个答案:

答案 0 :(得分:8)

如果您想阻止人们嗅探您的网络流量,请使用https而不是http。

如果你应该学习一件事,那就是加密很难。真的很难。如果你试图自己做,你就不会做对,并且可能会做出一些可能会在以后咬你的微妙错误。最好将加密保留给知道自己正在做什么的人。

答案 1 :(得分:4)

我认为HTTPS是不可能的。

你有没有想过ROT?愚蠢的简单实现至少:

var output = "";
for(var i = 0; i < input.length; i++)
{
    char = ( input.charCodeAt(i) + SOME_NUMBER ) %255;
    output += String.fromCharacterCode( char )
}

然后,在PHP中

$chars = $_POST['chars'];
$output = "";
for($i = 0; $i < strlen($chars); $i++ )
{
    $char = ord($chars[$i]) - SOME_NUMBER;
    if($char < 0 )$char += 255;
    $output .= chr($char);
}

答案 2 :(得分:3)

如果您想在Javascript上使用强大的PKI加密,则应检查jcryption

答案 3 :(得分:0)

我建议AES加密是一个不错的选择。你可以在这里找到JavaScript库https://code.google.com/archive/p/crypto-js/和PHP https://packagist.org/packages/blocktrail/cryptojs-aes-php

现在在PHP方面:

<?php
include "vendor/autoload.php";
use Blocktrail\CryptoJSAES\CryptoJSAES;

$passphrase = "secret";
$text = "example value";

$encrypted = CryptoJSAES::encrypt($text, $passphrase);
echo "Encrypted: ", $encrypted, PHP_EOL;

输出:

Encrypted: U2FsdGVkX1/JVv/nS7aExFZiatvG8Lha7MflNsfuLHo=

我们使用加密代码并在JavaScript中解密:

<!DOCTYPE html>
<html>
  <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
  </head>
  <body>
    <script>
      const passphrase = "secret",
            encrypted = "U2FsdGVkX1/JVv/nS7aExFZiatvG8Lha7MflNsfuLHo=";
            decrypted = CryptoJS.AES.decrypt( encrypted, passphrase );
      console.log( decrypted.toString( CryptoJS.enc.Utf8 ) );
    </script>
  </body>
</html>

在浏览器中启动此HTML后,您将获得JavaScript控制台:

example value

因此,您可以加密PHP中的敏感数据,并使用JavaScript在客户端应用程序中获取并解密。你可以在相反的方向做。只是不要忘记混淆JavaScript并使秘密看起来像一些JavaScript。

然而,您了解它并不是真正安全 - 只需付出相当大的努力,就可以找出加密方法,找到秘密并发现数据。