#javascript #php #mysql #ajax
#javascript #php #mysql #ajax
Вопрос:
Для демонстрационных целей, скажем, у меня есть электронное письмо, которое выходит еженедельно, в котором есть красные, зеленые и синие плитки с изображениями. В электронном письме им предлагается выбрать цвет. Когда получатель электронной почты нажимает на цвет, скажем, красный, он попадает на мой сайт ajax и появляется сообщение с благодарностью за выбор красного. База данных обновляется с помощью ajax, так что значение ‘red’ увеличивается на 1. На странице также говорится, что они могут изменить свое мнение, если захотят, или просто закрыть браузер. Под этим сообщением находятся три цветные плитки, на которые нужно щелкнуть.
Если пользователь решает, что он действительно хочет синий, и нажимает на эту плитку, база данных уменьшает красный на 1, а затем увеличивает синий на 1.
Теперь моя «проблема» связана с тем, что пользователь меняет свое мнение. Что я делаю, так это когда страница загружается и база данных обновляется по их выбору, я отправляю уникальный row_id обратно на страницу через ajax. Таким образом, если они передумают, я просто отправляю их новый выбор на сервер вместе с исходным идентификатором row_id. Я уменьшаю исходный row_id на 1 и увеличиваю их новый выбор.
Моя проблема в том, что это не кажется очень безопасным, поскольку row_id виден браузеру и конечному пользователю, если они захотят его увидеть.
Есть ли лучший способ, чем этот? Я не хочу, чтобы им приходилось нажимать «Отправить» при первой загрузке страницы, я хочу, чтобы один щелчок по электронной почте был всем, что им нужно сделать, чтобы зарегистрировать свой голос. А затем изменить свое мнение, если они хотят, или просто покинуть страницу.
Это ОЧЕНЬ простой пример того, что я на самом деле делаю, но любые советы будут оценены.
Комментарии:
1. Да, то, что вы делаете, возможно, открыто для повторной атаки, что ваша страница может быть обновлена с помощью тех же данных POST / GET и привести к изменению ваших значений путем «воспроизведения» страницы. Что вам нужно сделать, так это использовать уникальный ключ, который присваивается пользователю -> включить его в URL-адрес электронной почты, а затем (когда они нажимают на ссылку) они переходят на промежуточную страницу, которая проверяет ключ URL, а затем предоставляет им выбранный ими выбор цвета и выбор подтверждения / изменения. Именно здесь вы обновляете свою базу данных. При обновлении базы данных вы каким-то образом аннулируете ключ, чтобы его нельзя было использовать повторно
2. вам нужно будет записывать отдельные голоса, после чего изменение голоса одного человека становится тривиальным.
3. Система, которую вы должны использовать, должна работать так, как если бы вы где-то регистрировали учетную запись, и вам на электронную почту отправлялась ссылка для подтверждения того, что вы являетесь владельцем учетной записи. Если вы используете аналогичный механизм, но перенаправляете пользователя к цвету, который он изначально выбрал, и «вы хотите изменить свой цвет?» на той же странице, что и вы, вы могли бы заставить систему работать очень легко, если бы вы подумали о логике.
4. @BigChris К сожалению, нет возможности добавить уникальный код к URL-адресу в электронном письме. Электронные письма не отправляются из моей системы, это просто изображения со ссылками вокруг них, которые вставляются в электронные письма. Что-то вроде href=»mydomain.com/red »
5. @MarcB Я также записываю отдельные голоса, но я делаю то же самое, отправляя уникальный идентификатор строки обратно, чтобы я мог дополнить / обновить эту строку, если они передумают. Насколько это было бы тривиально? Я не знаю голосующих пользователей, они совершенно незнакомы с моим сайтом.