Как предотвратить подделку сообщений в системе, похожей на / не похожей на PHP? - PullRequest
4 голосов
/ 10 января 2012

Я пытаюсь создать похожую или непохожую систему, когда пользователь щелкает как пост, его / ее идентификатор пользователя (который хранится в сеансе) и идентификатор поста будут сохраняться в базе данных посредством вызова ajax.

Тогда я подумал, что если какой-то пользователь создаст html-форму с невидимым полем ввода (в котором есть один из его почтовых идентификаторов) на другом домене и передаст свою ссылку пользователю, который проверил, запомни меня позже или просматривает мойsite.

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

На мой взгляд, хорошее решение не приходит,Есть ли способ более надежный, чем HTTP реферер, чтобы предотвратить это?

Заранее спасибо

Ответы [ 3 ]

5 голосов
/ 10 января 2012

Один из способов - вставить в HTML секретную переменную, относящуюся к сеансу пользователя.Это может предотвратить мошенничество между сайтами.

В PHP вы генерируете случайный «ключ» и сохраняете его в сеансе:

$_SESSION['myFormVar'] = md5(mt_rand());

Затем в форме вы добавляете какскрытая переменная:

<input type="hidden" name="chkVar" value="<?=$_SESSION['myFormVar']?>"/>

Вы должны отправить свою форму через POST и предпочтительно через HTTPS, что затруднит (но не сделает невозможным) перехват значения chkVar.

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

2 голосов
/ 10 января 2012

Вы говорите о CSRF эксплойте.
Это хороший секретный вопрос.
Обычно он управляется с помощью ключа, который известен только серверу.
Этот ключ должен использоваться во всех ваших формах.
Вот маленький учебник для защиты от него

1 голос
/ 10 января 2012

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

...