Начини за създаване на уникален потребителски отпечатък в PHP

Кой е най-добрият начин за генериране на „пръстов отпечатък“ на уникалността на потребителя в PHP?

Например:

  1. Мога да използвам IP адреса на потребител като „пръстов отпечатък“, но може да има множество други потребители на същия IP
  2. Бих могъл да използвам IP + потребителски агент на потребителя като „пръстов отпечатък“, но един потребител може просто да смени от safari към firefox и отново да бъде разглеждан като уникален

В идеалния случай пръстовият отпечатък означава „машина“, а не браузър или „ip“, но не мога да се сетя как е постижимо това.

Отворен за идеи/предложения за това как уникално идентифицирате потребителите си и какви предимства/недостатъци има вашият метод.


person So Over It    schedule 03.11.2010    source източник
comment
Този сайт обхваща почти всяка част от информацията, която можете да използвате, за да разграничите хората чрез браузър. panopticlick.eff.org JavaScript, Java и Flash помагат много.   -  person JAL    schedule 03.11.2010
comment
стар въпрос, но това: md5(implode('',$_SERVER));   -  person Shea    schedule 27.09.2011
comment
@Shea Полезен коментар, но отпечатъците не се променят (метафорично казано) и ще има вариации в $_SERVER, несвързани с потребителя us1.php.net/reserved.variables.server   -  person PJ Brunet    schedule 05.11.2013
comment
@Shea Не бих използвал трика, който предлагахте, такъв, какъвто е, защото пръстовият отпечатък ще се променя при всяка посетена уеб страница. Но може би може да се подобри.   -  person Calimero    schedule 04.10.2017
comment
@Calimero Да, прав си. Полезно е, но трябва да филтрирате определени ключове.   -  person Shea    schedule 05.10.2017


Отговори (4)


Най-лесният и най-добър начин: използвайте phps управление на сесии - всеки клиент е даден ID, съхранен в бисквитка (ако е активирана) или даден като get-променлива на всяка връзка и формуляр (алтернативно можете да зададете бисквитка сами). Но това само отпечатва браузъра - ако потребителят смени браузъра си, изтрие бисквитките си или каквото и да е, вече не можете да го идентифицирате.

Идентифицирането на всеки клиент по IP адрес обикновено е лоша идея и няма да работи. Клиентите, които използват един и същ рутер, ще имат едни и същи IP адреси - клиентите, свързани чрез прокси-пул, могат да имат друг IP адрес при всяко зареждане на страница.

Ако имате нужда от решение, което не може да бъде манипулирано от клиента по лесен начин, опитайте се да направите комбинация от следното, като използвате всички, които се поддържат от браузъра на клиента, и ги сравнете при всяко зареждане на страница:

  • нормални HTTP бисквитки
  • Локални споделени обекти (Flash бисквитки)
  • Съхраняване на бисквитки в RGB стойности на автоматично генерирани, принудително кеширани PNG файлове с помощта на HTML5 Canvas етикет за обратно четене на пиксели (бисквитки)
  • Съхраняване на бисквитки в и четене на уеб история
  • Съхраняване на бисквитки в HTTP ETags
  • Съхранение на потребителски данни в Internet Explorer
  • Съхранение на HTML5 сесии
  • HTML5 локално хранилище
  • Глобално съхранение на HTML5
  • HTML5 Съхранение на база данни чрез SQLite

Има решение, наречено evercookie, което прилага всичко това.

person oezi    schedule 03.11.2010
comment
Свързахте се с немския превод на ръководството за PHP... Ето същата страница на английски: php.net/manual/en/book.session.php – Освен това използването на Evercookie или всеки друг начин за съхраняване на данни на клиента с изричната цел да се затрудни премахването им вероятно ще да бъдат незаконни в повечето страни. - person Adrian Schmidt; 24.01.2011

Постигането на 100% надеждност не е гарантирано, но комбинирането на някои общи методи може да ви даде значими резултати

  • Потребителите обикновено не сменят браузърите. Прекаленото усложняване на вашия алгоритъм само за постигане на инженерно съвършенство не си струва усилието.
  • Със сигурност принадлежите към 100-те най-добри уебсайта, ако можете да очаквате множество потребители от един и същ IP. Не го приемай лично, но просто не си толкова популярен.

Поемете по най-простия възможен път, който може да работи и коригирайте с течение на времето, ако изглежда необходимо.

person pestaa    schedule 03.11.2010
comment
напълно не съм съгласен с втората ви точка - в зависимост от това какъв сайт има, ще получите много потребители с един и същ ip много бързо. да кажем, че неговият сайт е браузър игра: всички ученици си разказват, приятелите играят заедно, а в часа по информатика, където имат интернет, всички играят тази игра от училищната мрежа (което означава: един и същ ip, но разработчикът трябва да разбере дали това е същият компютър, за да разбере, че това не е измамен мулти-акаунт) - person oezi; 03.11.2010
comment
@oezi Такава браузър игра ще се разбира добре с идентификаторите на сесии. - person pestaa; 03.11.2010
comment
наистина, просто исках да дам пример защо не можете да разчитате на ip-адреса дори на малки сайтове. - person oezi; 03.11.2010
comment
Да, иска ми се да съм популярен с моите сайтове. Като се има предвид това, малкото уеб приложение, което имам, работи на малък VPS (80Mb RAM - да!) - така че не е необходимо много, за да го претоварите. Трябва да осигуря честна употреба за всеки потребител. - person So Over It; 04.11.2010
comment
@So Over It: Имайки толкова малко ресурси, бих се съсредоточил върху ядрото на приложението си, а не върху гайките и болтовете, които могат да бъдат добавени по-късно. - person pestaa; 04.11.2010
comment
@oezi да, прав си, всякакви компютърни къщи с вътрешна мрежа - офиси, училища, болници, молове (безплатен wifi за клиенти),... - person jave.web; 03.07.2018

Има още нещо, което трябва да се вземе предвид, публичният IP адрес на потребител е нещо, което също може да се променя при всяко зареждане на страница.
Има множество организации, които сменят публичните IP адреси в своите рутери, за да балансират трафика.

person jmserra    schedule 12.12.2011

Имам три различни компютъра, различни преносими устройства и много от тях имат инсталирани различни браузъри. Използвам всички тези взаимозаменяеми у дома, нося ги със себе си на други места, така че основно на различни IP адреси. Това, което се опитвам да отбележа, е, че пръстовият отпечатък на браузър или машина по този въпрос никога няма да бъде безупречен, ако целта ви е да блокирате човек.

Препоръчвам ви да приемете различен подход. Преценете въз основа на неубедителната информация, с която разполагате, която подсказва самоличността на вашия забранен потребител (същият IP адрес или същият потребителски агент, ако е необичаен, или в противен случай някои от методите за отпечатване на браузъра на javascript, като налични шрифтове, налични добавки, нестандартни размер на прозореца и т.н.) и изискват от тези подозрителни посетители някаква по-висока форма на проверка на самоличността – като oauth с Facebook, Google+ или Twitter. След това можете да проверите дали този акаунт в социалните медии е истински или е създаден само за заобикаляне. Има и API за потвърждение по телефона, в случай че потребителската ви база не е запозната със социалните медии и в зависимост от това колко ценно е за вас потребителите да не заобикалят забраната.

person Thoracius Appotite    schedule 11.03.2017