MySQL PHP Проверить объявление / публикацию по электронной почте перед отображением на веб-сайте? - PullRequest
1 голос
/ 25 августа 2009

Работа над веб-приложением "купля-продажа" с PHP MySQL, где пользователи могут публиковать рекламу товаров и услуг.

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

Я хочу отправить создателю любого нового объявления электронное письмо, содержащее URL-адрес, который указывает на страницу, основной функцией которой является получение публикуемой переменной $ advert_id и выбор рекламного объявления из БД для обновления / редактирования / удаления. .

Эта переменная встроена в URL с синтаксисом PHP то есть. [http://www.example.com? Содержание = modify_advert & advert_id = 2246317] . * +1010 *

Эту часть довольно просто реализовать, НО, если пользователь должен был изменить эту переменную с именем "advert_id = 2246317" на любое другое целое число, он может получить доступ к другим публикациям / объявлениям в системе.

Система основана на рекламе, и пользователям не требуется учетная запись или логин для публикации, поэтому мы не можем запрашивать логин в точке проверки, которая была бы удобна.

Любые идеи относительно того, как мы могли бы защитить рекламу / сообщения в системе от доступа через вышеупомянутый URL ???

Есть предложения?

Ответы [ 3 ]

1 голос
/ 25 августа 2009

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

Один из распространенных и «достаточно хороших» приемов для генерации такого случайного пароля - взять одну, секретную, действительно случайную строку (я обычно использую grc.com ), объединить ее с уникальным advert_id и хеш все это, скажем, с SHA1(). Вот так:

UPDATE advert SET advert_hash = SHA1(CONCAT(advert_id, 'lots-of-randomness-here'))

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

Например, я мог бы получить это вместо advert_id=1:

f2db832ddfb149522442c156dadab50307f12b62

Если бы я хотел незаметно отредактировать advert_id=2 (который создал кто-то еще), мне сначала пришлось бы угадать , что хеш это полностью другая строка:

e5c6a3a9473b814b3230ee7923cbe679fcebc922

Итак, включите это в URL-адрес вместо рекламного_ идентификатора (или, если хотите, в дополнение к рекламному-идентификатору), и вдруг ваши пользователи не смогут испортить чужой контент.

0 голосов
/ 25 августа 2009

Создание идентификатора GUID в качестве идентификатора объявления, поэтому простые попытки угадывания идентификаторов вряд ли будут успешными.

0 голосов
/ 25 августа 2009

Вы можете добавить соль к идентификатору и затем хешировать его.

sha1($advert_id . $salt);

Отправьте это пользователю в URL-адресе вместо advert_id и сохраните в своей базе данных вместе с advert_id.

Затем, когда они нажимают на ссылку, вы найдете соответствующее объявление для этого хэшированного значения.

Делая соль секретом, вы удерживаете пользователей от «угадывания» действительного URL, который позволит им изменить объявление, которое они не опубликовали. Возможно, вы могли бы использовать адрес электронной почты пользователя, опубликованное время и / или имя или что-то, что пользователь вводит, когда они создают сообщение.

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