download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Изпращане на парола чрез html форма по некриптирана връзка?

<1 2 >

Автор
Съобщение
milen
Съб, 21.08.10, 17:04
Здравей insecteater,
 
Най-доброто решение за логване си остава SSL ( сайта да си има сертификат, и да се използва https ). Понякога, много рядко той е недостъпен, и тогава се налага да се измислят подобни неща.
 
Начина който предлагаш, според мен е добър и работещ.
 
Понеже същия проблем решавахме, когато правихме фреймуърка за DBG4, само за информация ще ти кажа какво решение направихме. То е много близко до твоето, с малки разлики, затова тук ще обърна внимание предимно на разликите:
 
1. Решихме да не правим сесия на всеки потребител, който получава web-формата. Затова с web-формата за логване изпращаме timestamp. Караме javascript-та на клиента да запише кога (пак timestamp) се е стартирал (формата за логване се е заредила). Използваме този timestamp по подобен начин, като както ти използваш случайното число.
 
2. Не залепяме директно паролата към timestamp , а преди това и правим md5 със някакъв константен низ - salt. По този начин не се налага в сървъра си да държим пароли в явен вид, а ги държим 'обработени' по същия начин. Това повишава сигурността, ако някой недобросъвестен хакер/служител се добере до таблицата с паролите - няма да ги разшифрова.
 
3. Когато се изпраща заявката за логване в сървъра, javascript изчислява колко време е стояла формата в клиента преди изпращането и коригира timestamp с толкова секунди (добавя му ги).
 
4. Когато сървъра получи заявката той прави две проверки:
- дали timestamp се различава с повече от 20 секунди от локалния timestamp. Ако да - не се логва;
- проверява дали същия потребител не се е логнал преди по-малко от 20 секунди - ако да - също не се логва.
Тук числото 20 е условно, и е предположение за най-дългото време за зареждане на страницата.
 
5. За предаването на timestamp и хеша на паролата използваме скрити полета, а паролата от явното поле я изтриваме. По този начин системата се down-грейдва до обикновена система за логин, ако липсва javascript. Ако не се изпрати хеша на паролата, а се изпрати паролата в явен вид, PHP прави хеша.
 
Опита ни показва, че IP-то на един потребител може да е доста различно в рамките на една сесия. Има случаи в които част от заявките на потребителя минават през прокси на доставчика му, а част не минават (GET минават през прокси, POST не минават). Поради това не правим проверка по IP в момента на логване, но правим блокиране при установяване на 2 активни двойки IP-сесия.
 
Недостатък на подобна система (без SSL) си остава момента с регистрирането. Ако бъде прихванат трафика при регистриране на паролата, дори и тя да се предаде в криптиран вид, ако криптирането не е от типа публичен:частен ключ, тогава може да се компрометира сигурността.
insecteater
Нед, 22.08.10, 11:28
Много благодаря на всички ви за коментарите.
tegote - не бъди толкова черноглед - виж какви страхотни отговори се получиха :)
phrozencrew ама и ти сколаса да ми намериш адрес - даже и с картинки :) за по-добро затвърждаване на знанията.
download_er Всъщност твоето споменаване на комбинация от хеширане и символи ми опрости живота. А пък сайта ако беше общински, просто щях да ползвам парите на данъкоплатците да пусна HTTPS :P
koko5 - пак мерси за събраните на куп идеи, от които си щипнах
....
Чудя се откъде да почна да коментирам поста на milen ...
Като за начало да благодаря, че поднася на тепсия такова решение, макар предполагам да рискува, като издава в подробности такава информация за собствени разработки.

Отначало и аз си мислех, да криптирам по някакъв начин паролата, за да не седи в явен вид - варианта с постоянния salt от т. 2 Ама нали съм си мързел ... Но след като и ти обръщаш внимание на този проблем, ще се постресна. Мързела в случая може да изиграе лоша шега. Още сега го правя по този начин. Не го направих, понеже постоянният salt неминуемо трябва да се вижда и при клиента т. е. бихме имали хеширани пароли с известен salt и алгоритъм (от страната на Javascript-a) но по-добре така наистина, отколкото да седят голи-голенички паролите някъде си.

Не разбрах след като не правите сесия, как сравнявате timestamp-a, който сте изпратили.
Когато писах реда с генерирането на случайния низ си казах - абе защо по дяволите просто не използвам time(), но не ми хареса идеята да генерирам предсказуем ключ (понастоящем за случаен низ използвам $salt = md5(uniqid()); ) Затова по принцип гледах да бягам от timestamp-ите, но идеята за включване на времеви прозорец включена в криптирането е доста интригуваща.

Това с downgrade-ването при неподдържане на JavaScript от параноя не мога да си го позволя (т. 5). За един сайт, който гони широка група от потребители даже си е задължителна такава възможност. За моя обаче идеята някой да влезе с парола в явен вид не ми допада. Още повече, че функционалността на администраторската част на сайта си зависи от JavaScript. Само за там е необходима парола. Целевите ни групи са различни.

Не знаех, че е чак толкова вероятно една работна сесия толкова често да работи през различни IP-та. Благодаря за споделените наблюдения и опит.
Весел ден на всички - настоящата тема даже преизпълни очакванията ми. Благодарности на всички, които се включихте

milen
Нед, 22.08.10, 12:58
Само да кажа нещо във връзка с параноята - трябва да се отървем от нея. Тя е признак на по-слабо развито общество, каквото за съжаление е българското.
 
Не знам какъв сайт изграждаш, но ние имаме опит с корпоративна ЕРП система, 500+ потребители, разположени в 15+ държави, 1000+ бизнес документа на ден, функционираща от 2004 г. до сега.
 
Всъщност достъпа до корпоративна информация от страна на конкуренти и т.н. е толкова защитен, колкото е защитено най-слабото място - човешкия фактор. Колкото и да защитаваш информационната си система, конкурента ти винаги може да даде пари/услуга или чрез приятелски/роднински връзки да измъкне свежа информация от твоята система, без въобще да се опитва да проникне в нея. Може например служител от твоята корпорация да отиде на работа при конкурента ти (това се случва често) или пък конкурента ти да има връзки в данъчното/митницата.
 
Номерът е, че така трябва да направиш дейността си, че дори и цялата твоя информация да попадне при конкуренцията, това да няма никакво значение. Ето няколко прости съвета за това:

  • трябва да се спазват законите на държавите, където правиш бизнес; ако не спазваш законите, наистина ще ти трябва добре за опазваш тайните си.
  • в бизнеса трябва да се стремиш да си по-добър, не защото знаеш някаква тайна, а защото си организираш дейността ефективно, предлагаш качествени продукти и т.н.
  • да се обграждаш с лоялни клиенти, а не да ги крадеш от конкурентите си с по-ниски цени.
     
    По-добре е в бизнеса да не играеш покер, а бридж с открити карти.
     
    Развития свят отива към все по-голяма откритост на бизнес транзакциите. Ето например база данни с всички входящи декларации, на океански транспорт към USA http://importgenius.com . От тук може да видиш коя щатска фирма от кой доставчик какво внася. А в България това се смята за дълбоко пазена корпоративна тайна.
     
    Според мен, достъпността и функционалността на една такава система са по-важни черти от нейната защитеност срещу чужди погледи.
  • milen
    Нед, 22.08.10, 13:49
    И още неща по техническата част:
    1. Най-често паролите се прихващат чрез key-loggers. Затова добавяме виртуална клавиатура за параноиците. Можеш да видиш демо на http://dbg.to/ . Кликни два пъти в крайната дясна част на input-полетата.
    2. Може да сложиш sleep(1) при успех, sleep(3) при неуспех, някъде при логването така, че да направиш по-трудна работа на използващите брутална сила.
    stoqncho
    Нед, 22.08.10, 13:58

    RE: Изпращане на парола чрез html форма по некриптирана връзка?

    ” И още неща по техническата част:
    1. Най-често паролите се прихващат чрез key-loggers. Затова добавяме виртуална клавиатура за параноиците. Можеш да видиш демо на http://dbg.to/ . Кликни два пъти в крайната дясна част на input-полетата.
    2. Може да сложиш sleep(1) при успех, sleep(3) при неуспех, някъде при логването така, че да направиш по-трудна работа на използващите брутална сила. „
    Брей това много готино е, ако не беше казал, че трябва да се кликва в крайната дясна част на полетата щях да се пуля и да викам "Кой туй?". Ама нали не ги разбирам тея неща тъй ще е...
    редактиран от stoqncho на 22.08.10 13:58
    insecteater
    Нед, 22.08.10, 14:48

    RE: Изпращане на парола чрез html форма по некриптирана връзка?

    Ами .. аз такова, да си призная един грях - в администраторския си панел използвам открадната от download.bg функция на JavaScript - тази, която локализира маркирания текст в текстовото поле и го обгражда с код.
    Това с виртуалната клавиатура е готина глезотийка наистина. Гледам че е "Licenced for free distribution under the BSDL" - нищо чудно да се възползвам.

    Толкова проста идея със sleep не би ми хрумнала. Вече я приложих. Благодаря за пореден път.

    Какъв сайт изграждам? Лична custom система, +-3 потребителя, разположени в една държава, най вече област, 1 публичен документ на ден, тепърва функциониращ надявам се след 2-3 седмици пълноценно. Всъщност сайта е нещо като място, където да трупам неща, които ми трябват в ежедневната ми работа, и което да мога да ползвам където и да се намирам. Например как се маха паузата между заявките за принтиране в ДОС, как се инсталира win 7 от флашка, reg файл за често срещани автоматични настройки и прочие дейности, свързани с поддръжката на PC-та. Разположени под шапката на удобна търсачка. Разбира се тези ресурси са достъни и за други хора. Замислям го от поне година, и вече се понатрупа доста материал, който би бил подходящ за там, а не е удобно всеки път като имам нужда да ровя google и да проследявам връзки и форуми.

    Надявам се, повече хора да споделят бизнес възгледите ви.

    oldcastle
    Нед, 29.08.10, 06:32

    RE: Изпращане на парола чрез html форма по некриптирана връзка?

    ” И още неща по техническата част:
    1. Най-често паролите се прихващат чрез key-loggers. Затова добавяме виртуална клавиатура за параноиците. Можеш да видиш демо на http://dbg.to/ . Кликни два пъти в крайната дясна част на input-полетата.
    2. Може да сложиш sleep(1) при успех, sleep(3) при неуспех, някъде при логването така, че да направиш по-трудна работа на използващите брутална сила. „
    Само да кажа, че има кейлогери, които правят снимки при всяко кликане с мишката и при всяко натискане на Enter. Тези снимки се съхраняват в скрита папка или се изпращат на зададен имейл. Но като цяло виртуалната клавиатура е добра идея, като инструмент за борбата с кейлогерите. SG Експресбанк също имат такава, като се логваш в акаунта си там. Всъщност това е единствения начин за логване там.
    milen
    Нед, 29.08.10, 11:00
    За успокоение на тези, които се страхуват от прихващане на кликванията с мишката от keylogger-и, ще отбележа, че виртуалната клавиатура, която използваме има "clickless" режим. В този режим се въвеждат символи, просто като се задържи курсора на мишката за повече от 2 секунди върху определен символ. (времето може да се регулира). Разбира се, напълно е възможно да се направи програма, която да записва екрана всеки път, когато курсора на мишката не се мърда повече от 2 сек., но това усложнява задачата на keylogger-a значително.

    <1 2 >

    Коментар

    за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.