Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Шифрование javaScript input
 
 автор: Filatov_Aleksey   (07.02.2011 в 16:01)   письмо автору
 
 

Здравствуйте.
Возникла потребность в шифровании данных на уровне клиента, т.е.
Есть некая форма с полями input, textarea, input типа checkbox (галочки), данные с формы передаются на сервер и там обрабатываются php. Хочу обеспечить надлежащую безопасность вводимых пользователем данных, т.е. передаваемые данных от клиента должны быть зашифрованы (зашита от перехвата по каналу связи), далее на сервере текст введённый пользователем рас кодируется, и выполняются различные манипуляции с ним.

Задача состоит в том, как зашифровать данные от пользователя и на стороне сервера расшифровать? То есть обеспечить зашиту информации по каналу связи.

  Ответить  
 
 автор: Саня   (07.02.2011 в 16:12)   письмо автору
 
   для: Filatov_Aleksey   (07.02.2011 в 16:01)
 

Можно применять всякие синхронные и асинхронные шифрования посредством javascript. А можно не париться и поднять https.

  Ответить  
 
 автор: Filatov_Aleksey   (07.02.2011 в 16:29)   письмо автору
 
   для: Саня   (07.02.2011 в 16:12)
 

По поводу https - хостер не даёт такую возможность.
Где можно почитать (узнать) по подробнее шифрования средствами javascript?
Только нужно, что бы php смог его расшифровать.

  Ответить  
 
 автор: Уфимец   (07.02.2011 в 17:46)   письмо автору
 
   для: Filatov_Aleksey   (07.02.2011 в 16:29)
 

http://phpjs.org/functions/md5:469

  Ответить  
 
 автор: SHAman   (07.02.2011 в 18:11)   письмо автору
 
   для: Уфимец   (07.02.2011 в 17:46)
 

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

Автору:
Для шифрования нужен ключ. Ключ, который доступен JS странен.

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

Мороки уйма, защита, имхо, вырастет не сильно. Но если надо, то я бы делал как-то так. Может, стоит подключить к шифорванию самого пользователя. Рисовать ему код шифрования как капчу, просить ввести в поле, откуда и читать JS.

  Ответить  
 
 автор: deimand   (07.02.2011 в 19:57)   письмо автору
 
   для: SHAman   (07.02.2011 в 18:11)
 

Вы вообще что хотите, ботов отбить, пароль спрятать, или каждый комент "шифровать"?

  Ответить  
 
 автор: Абырвалг   (08.02.2011 в 03:20)   письмо автору
 
   для: SHAman   (07.02.2011 в 18:11)
 

Вообще-то можно и без сессий.

Положим, ключ - это что-то случайное, генерируемое PHP-программой.
Надо вызов ajax-функции повесить на onsubmit формы и задать return false.
По нажатию на SUBMIT аяксом тянется ключ, который сервер генерирует и при генерации СОХРАНЯЕТ в файле keys.txt как отдельную строку +сам js-скрипт шифрования.
По получении ключа и кода шифрования js-скрипт страницы запускает полученный скрипт, шифрует им введённые в текстовые поля данные по этому ключу и сабмитит форму методом submit (), передавая в том числе и ключ, зашифрованный по самому ключу.

Расшифровка "ключа по ключу" с целью получения самого ключа - тривиальная задачка.
PHP-программа её решает и проверяет наличие такового ключа в файле keys.txt. Если он есть - из файла keys.txt строка с ним удаляется, а PHP-программа расшифровывает данные по ключу. Если такового ключа нет, то значит - "сторонняя атака" :-)

Разумеется, при открытии/закрытии файла keys.txt следует использовать оператор flock со стандартными операндами LOCK_EX / LOCK_UN - для случая нереально большого "наплыва" посетителей в один момент:-)

  Ответить  
 
 автор: SHAman   (08.02.2011 в 09:37)   письмо автору
 
   для: Абырвалг   (08.02.2011 в 03:20)
 

Не знал что задача расшифровки ключа по ключу - тривиальная задача. Как она производится? Подбором при известной длине ключа? Это долго будет. А как тогда?

  Ответить  
 
 автор: The Electronic Cat   (08.02.2011 в 09:50)   письмо автору
 
   для: Абырвалг   (08.02.2011 в 03:20)
 

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

Единственный вариант, который приходит в голову - положить клиенту на комп файл, который будет пытаться вытянуть страница, и который будет содержать ключ.

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

Замечания:
1. Как передать такой файл - тоже вопрос , но решаемый, возможно, чуть проще.
2. В этом случае имеет смысл писать уже отдельный клиентский модуль (службу или демона, слушающих, например, 80-й порт), а не заставлять клиента маяться с установкой в нужное место файла-ключа и организацией исключения.
3. Не уверен, есть ли вообще нужные средства обработки локального файла иначе как в связке Windows / Interner Explorer / ActiveXObject("Scripting.FileSystemObject");
(Файл не должен подключаться как JS через тег <script>, иначе его сможет подключить куда-либо и злоумышленник).

  Ответить  
 
 автор: SHAman   (08.02.2011 в 09:59)   письмо автору
 
   для: The Electronic Cat   (08.02.2011 в 09:50)
 

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

  Ответить  
 
 автор: The Electronic Cat   (08.02.2011 в 11:53)   письмо автору
 
   для: SHAman   (08.02.2011 в 09:59)
 

Не понимаю. Если кто-то имеет доступ к трафику, а в трафике содержится и шифр и ключ для него, то этот кто-то обладает всем необходимым для расшифровки. Или я чего-то не улавливаю?

  Ответить  
 
 автор: Саня   (08.02.2011 в 11:54)   письмо автору
 
   для: The Electronic Cat   (08.02.2011 в 11:53)
 

Почитайте про асинхронное шифрование.

  Ответить  
 
 автор: The Electronic Cat   (08.02.2011 в 11:59)   письмо автору
 
   для: Саня   (08.02.2011 в 11:54)
 

Я читал, спасибо...
Развейте мысль, пожалуйста.

  Ответить  
 
 автор: Саня   (08.02.2011 в 12:07)   письмо автору
 
   для: The Electronic Cat   (08.02.2011 в 11:59)
 

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

  Ответить  
 
 автор: The Electronic Cat   (08.02.2011 в 12:33)   письмо автору
 
   для: Саня   (08.02.2011 в 12:07)
 

А что в предложенной схеме закрытый ключ?

  Ответить  
 
 автор: Саня   (08.02.2011 в 12:49)   письмо автору
 
   для: The Electronic Cat   (08.02.2011 в 12:33)
 

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

  Ответить  
 
 автор: SHAman   (08.02.2011 в 12:58)   письмо автору
 
   для: Саня   (08.02.2011 в 12:49)
 

Он спросил как реализовать асинхронное шифрование на сайте.

  Ответить  
 
 автор: Саня   (08.02.2011 в 13:26)   письмо автору
 
   для: SHAman   (08.02.2011 в 12:58)
 

А вы так и не предложили готовое решение...

  Ответить  
 
 автор: SHAman   (08.02.2011 в 13:29)   письмо автору
 
   для: Саня   (08.02.2011 в 13:26)
 

Я предложил выше. Вам его в код облечь? Это слишком долго. Я думаю, тут надо не мериться письками кто что предложил, а говорить по делу. То что вы описали - это интересно, но не очень понятно как это реализовать.

  Ответить  
 
 автор: Саня   (08.02.2011 в 13:38)   письмо автору
 
   для: SHAman   (08.02.2011 в 13:29)
 

Я говорю только по делу. В гугле полно готовых скриптов, реализующих RSA и прочее. Или вам скопипастить код?

  Ответить  
 
 автор: The Electronic Cat   (08.02.2011 в 19:35)   письмо автору
 
   для: Саня   (08.02.2011 в 12:49)
 

Перечтите мое сообщение. Я не спрашивал Вас, что такое закрытый ключ. Я спросил, где он в предложенной схеме.

upd: Виноват. Я не уловил, что ТС нужно шифровать только исходящие данные. В таком случае Ваше предложение подходит.

  Ответить  
 
 автор: Filatov_Aleksey   (08.02.2011 в 22:22)   письмо автору
 
   для: The Electronic Cat   (08.02.2011 в 19:35)
 

Спасибо всем за ваши рассуждения. На основании них, я поискав в интернете нашёл довольна таки интересную статью http://blog.mesos.ru/2008/03/13/асинхронное-шифрование-в-javascript/#more-51
Там как раз таки раскрывается мой вопрос.
RSA javascript php там вот такая связка. Пока на практике не пробовал, но в ближайшее время обязательно попробую.

  Ответить  
 
 автор: Trianon   (08.02.2011 в 22:34)   письмо автору
 
   для: Саня   (08.02.2011 в 11:54)
 

Ради всего святого!
Не асинхронное!
Асимметричное!

  Ответить  
 
 автор: The Electronic Cat   (09.02.2011 в 00:12)   письмо автору
 
   для: Trianon   (08.02.2011 в 22:34)
 

Этот термин уже давно в ходу. Хоть он и нелогичен, но, в общем-то, это уже данность. Естественный язык к логике мало восприимчив, даже если этот язык - профессиональный :)

  Ответить  
 
 автор: Trianon   (09.02.2011 в 00:25)   письмо автору
 
   для: The Electronic Cat   (09.02.2011 в 00:12)
 

Во-первых, Вы преувеличиваете.
Во-вторых, данность это или нет, определяется реакцией обычных людей.
Таких как Вы. Или я.

  Ответить  
 
 автор: The Electronic Cat   (09.02.2011 в 02:08)   письмо автору
 
   для: Trianon   (09.02.2011 в 00:25)
 

До какого-то момента. Дальше личное отрицание термина превращается в экстравагантность :).

Но, возможно, Вы правы в том, что в случае с шифрованием этот момент еще не настал.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования