2013-03-14 3 views
0

Мне нужно передать переменную в функцию onclick, чтобы я не хотел, чтобы пользователь мог просматривать источник страницы и просто читать. Я хочу кодировать строку и затем декодировать ее в функции, в которую передаю строку.Как кодировать/декодировать строки в JavaScript?

Я выполнил поиск Google для этого и могу найти информацию о кодировании/расшифровке URL-адресов, чтобы безопасно передавать их, но не строки в целом. Есть ли у JavaScript какие-либо встроенные функции кодирования/декодирования (надеюсь, что PHP тоже, потому что я также буду использовать PHP для отправки закодированной строки)?

+1

Необходимо ли сначала выставить строку в коде JavaScript? Можете ли вы не просто держать вещи на стороне сервера? –

+4

Если вы хотите хранить секреты, не используйте JavaScript. –

+2

* «Я не хочу, чтобы пользователь мог просматривать исходный код страницы и легко читать». * Тогда вы имеете в виду шифрование/дешифрование. См. Вопрос simliar: http://stackoverflow.com/questions/3609005/simple-javascript-encrypt-php-decrypt-with-shared-secret-key – sweetamylase

ответ

1

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

Я призываю вас хранить эти секреты на стороне сервера, возможно, в состоянии сеанса или в том, что связано с текущим пользователем. Не отправляйте его клиенту.

+0

Он хочет зашифровать URL-адрес своего местоположения в mp3-файле - невозможно сохранить это на сервере (и, хотя вы можете сохранить его в простой форме из исходного кода, вы не можете удержать его с сетевой панели) :-) – Bergi

1

Чтобы получить URL-адрес от javascript, попробуйте использовать некоторый идентификатор. Вам придется перевести этот идентификационный сервер, а затем в URL. Вы можете использовать простой массив, такие как:

function getLink($songID) { 
    $decodeArray=array(
     1=>"www.mysite.com/myfirstsong.mp3", 
     2=>"www.othersite.net/othersong.mp3"); 
    return $decodeArray[$songID]; 
} 

die(getLink($_GET['songID']));//send back the URL 

или вы можете использовать базу данных в этом перевод PHP код (выше)

Там у вас есть 2 варианта, как сделать это «автоответчик» 1) ответ на XMLHttpRequest с URL-адресом (из вашего php-скрипта) и сбрасыванием возвращаемого значения из javascript на флэш-клиентскую часть (как в приведенном выше коде) или 2) ответьте только на сообщение статуса «ОК» на Javascript и отправьте URL-адрес непосредственно на флешку плеер - вам нужно будет немного кода в ActionScript, чтобы иметь возможность сделать это.

Проблема заключается в том, что вам необходимо сообщить клиенту (или Flash) о фактическом месте песни (читаемой строке URL, где она может найти эту песню), поэтому она должна вернуться к клиенту и может перехватываться с помощью сетевого инструмента анализатора (анализатора пакетов). , а в случае кода выше можно напрямую запросить этот скрипт php и прочитать ответ на экране без необходимости обнюхивать.

Чтобы не допустить, чтобы вам приходилось напрямую общаться с Flash через https (не уверен, будет ли это работать) или вообще не отправлять URL-адрес и вместо этого передавать содержимое этой песни непосредственно в приложение Flash с помощью сокета соединение между клиентом Flash Player и вашим (домашним) сервером сокетов php.

+0

Ничего себе, очень похоже на мой ответ, +1 :) –

1

Что вы пытаетесь реализовать, это DRM, который невозможно реализовать с использованием браузеров и JavaScript. Конечно, вы всегда можете усложнить пользователю доступ к звуковому файлу, но будьте осторожны, что вы можете легко отпугнуть своих пользователей.

Что вы можете сделать, так это создать большой случайный (например, от 8 до 16 байт или около того) на стороне сервера или хэш-счетчик. Затем вы делаете MP3 доступным только один раз для загрузки с использованием данного случайного значения. В следующий раз, когда любой пользователь хочет загрузить файл, он получает новый случайный случай. Рандомы достаточно велики, чтобы пользователь никогда не угадывал следующий файл. Как сказано, вы не можете запретить первую загрузку, конечно, поэтому любой, достаточно умный, чтобы играть с кешем браузеров, легко нарушит схему.

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

Вы можете URL-кодировать случайное значение с помощью шестнадцатеричных чисел или с помощью base64, а затем с помощью функции URL-encode.

+0

Действительно очень похожи. Случайное число лучше. :) – Martina