Запутывание переменных POST между Javascript и PHP - PullRequest
3 голосов
/ 24 июня 2011

В идеале я хотел бы зашифровать переменные, чтобы не было возможности их выяснить, однако, учитывая, что клиент отправит переменную через javascript и что все, что можно расшифровать, если они увидят код, я ищу альтернативы.

Я думал о том, чтобы использовать что-то, что возвращало бы HEX, аналогично md5 или sha1, но с шифрованием, а затем каким-то образом включить серверное время или дату в переменную, чтобы шифрование действовало только в течение 1-2 минут.

Javascript будет иметь запутанную / свернутую функцию, которая будет основывать шифрование вовремя согласно javascript, а затем отправлять его в php. Пока дата / время сервера не превышают X минут, они будут правильно расшифровываться.

Я хотел бы отправить ему случайные данные и вернуть случайные данные. Я не хочу, чтобы это были те же данные.

Это лучший метод? Я только пытаюсь остановить людей, которые пытаются использовать HTTP снифферы. Я знаю, что когда они доберутся до источника javascript, ничто не сможет помешать ему, если будет достаточно времени / понимания того, что происходит.

Если вы собираетесь публиковать реальный код, помните, что функция / возможность должна существовать как в javascript, так и в PHP5 (<5.3). Я бы хотел, чтобы нативные простые / маленькие функции не реализовывали огромный сторонний класс для JS и PHP. </p>

Редактировать: SSL / HTTPS исключен.

Ответы [ 4 ]

8 голосов
/ 24 июня 2011

Если вы хотите, чтобы люди не прослушивали ваш веб-трафик, используйте https вместо http.

Если есть одна вещь, которую вы должны изучить, это то, что шифрование сложно. Действительно трудно. Если вы попытаетесь сделать это самостоятельно, вы не поймете это правильно и, скорее всего, совершите небольшую ошибку, которая может укусить вас позже. Лучше оставить шифрование людям, которые знают, что они делают.

4 голосов
/ 24 июня 2011

Полагаю, о 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);
}
3 голосов
/ 24 июня 2011

Если вам нужно надежное шифрование PKI в Javascript, вам следует проверить jcryption .

0 голосов
/ 30 октября 2017

Я полагаю, что шифрование 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.

Тем не менее, вы понимаете, что это не совсем безопасно - со значительными усилиями можно найти способ шифрования, найти секрет и раскрыть данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...