Кодирование ввода пользователя в качестве параметра URL GET в JavaScript - PullRequest
0 голосов
/ 17 октября 2010

Я пишу функцию JavaScript, которая должна поддерживать три свойства:

  • быть очень маленьким и легким - без внешних библиотек
  • кодирует строку таким образом, чтобывозможность передачи в качестве параметра GET
  • эта строка должна быть снова декодирована в месте назначения

По сути, она аутентифицирует пользователя, отправляя его имя пользователя и пароль на страницу PHP, котораязатем проверяет это.Это делается с помощью GET , потому что я еще не нашел способ сделать фоновый междоменный запрос POST.Проблема в том, что если у пользователя есть символ, такой как «#» или аналогичный, в его пароле, он не будет отправлен должным образом.

В настоящее время, чтобы избежать этого, я encode() строка пароля перед отправкой, что позволяет получить его без проблем.Тем не менее, я прочитал, что PHP urldecode() не является идеальным аналогом для этого, так как есть угловые случаи, которые рассматриваются по-разному (то есть '', '+' и т. Д.).К сожалению, я больше не могу найти этот документ, поэтому я не могу процитировать его, но суть в том, что один из них преобразует пробелы в знаки «+», которые другие воспринимают как действительный знак плюс или что-то в этом роде ...

Поэтому я ищу функцию Javascript, которая может взять строку и сделать ее URL-безопасной, и которая имеет идеальную функцию обращения в PHP, чтобы можно было восстановить исходную строку.

Возможно, ужасный код, который я сейчас использую для достижения этой цели:

login.onsubmit = function(){
    loginFailMsg.style.display = 'none';
    var inputs = login.getElementsByTagName('input');
    var formdata = 
        'username='+inputs[0].value+'&password='+encode(inputs[1].value);
    submit.src = formtarget+'/auth/bklt?'+formdata;
    userinfo = undefined;
    setTimeout(getUserinfo,300);
    return false;
};

Ответы [ 3 ]

2 голосов
/ 17 октября 2010

encodeURIComponent , PHP будет автоматически декодировать его при заполнении $_POST или $_GET

1 голос
/ 17 октября 2010
'&password='+encode(inputs[1].value)

Откуда берется функция encode?Мне кажется, что быстрый ответ на ваш вопрос использует encodeURIComponent(), доступный начиная с JavaScript 1.5.См. Также Сравнение escape (), encodeURI () и encodeURIComponent () ;он также не кодирует все, но действительно кодирует все, чего ожидает сервер.

(Что касается междоменных вызовов AJAX POST, я бы действительно посмотрел на "JSON сPadding ". См. JSONP с jQuery , о котором я упоминал в комментариях ранее. Это также предотвратит проблемы с timeout, который вы выбрали случайно, и jQuery также поможет вам, много , чтобы избавиться от inputs[0].value и т. П. И, поскольку у вас , по-видимому, уже есть хеш-код MD5 на сервере, я бы действительно хешировал и пароли на стороне клиента - см. Ответ Карла - и вместо этого сравните эти хэши. Уважайте пароль своего пользователя и свое время, отбросьте это никаких внешних библиотек требование!)

1 голос
/ 17 октября 2010

Я не думаю, что есть такая вещь, как обратимая хеш-функция. Однако существует множество библиотек javascript md5 .

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