Comments 52
использовать формы и POST-запросы? :)
PS: На самом деле не очень понимаю, в чём, собственно, проблема. Что-то серьёзное с таким сделать сложно, ну а если для вас так критично не допустить подобного на своём ресурсе — решение элементарно, юзайте форму и POST…
PS: На самом деле не очень понимаю, в чём, собственно, проблема. Что-то серьёзное с таким сделать сложно, ну а если для вас так критично не допустить подобного на своём ресурсе — решение элементарно, юзайте форму и POST…
+1
Это не выход я считаю, пост форму можно подделать, на стороннем сайте.
И результат для пользователя будет такой же.
И результат для пользователя будет такой же.
0
Ну это всё же не картинка, а форма. Ну и нужно проверять реферрер, видимо.
+1
Я вижу только использование специально генерируемого ключа для каждого пользователя и его проверку при запросах разного рода.
Но это по моему немного не удобно.
Но это по моему немного не удобно.
0
реферер можно тоже елементароно подделать :) а вообще проблема надуманна, как по мне
-1
Что-то я тоже проблемы не увидел.
-1
Это все потому, что не придерживаются REST
-3
>Последнее время мне очень интересна эта проблема
— хотите поговорить об этом?
— хотите поговорить об этом?
-5
Спасибо, теперь мне стало понятно, зачем действительно нужно использовать метод POST для запросов, изменяющих данные на сайтах, где юзеры могут тем или иным способом вставлять HTML (UGC, например).
Проверил все свои сайты.
Проверил все свои сайты.
0
x = random()
session[token] = x
a href='qwe.php?token=x'
if(session[token] != get[token])
exit
session[token] = x
a href='qwe.php?token=x'
if(session[token] != get[token])
exit
+4
Наверное лучший вариант, но не очень красиво я считаю.
И если использовать именно Ваш вариант, например пользователю после какого то действия с сайтом, понадобится дать ссылку другу, то друг увидит пустую страницу.
И если использовать именно Ваш вариант, например пользователю после какого то действия с сайтом, понадобится дать ссылку другу, то друг увидит пустую страницу.
0
php.net/session_id
+1
Всё просто. Нужно в критически важные ссылки добавлять логин пользователя (а на сервере сверять его, к примеру, с ID сессии). Ссылка для выхода будет выглядеть примерно так: www.site.com/user/%username%/logout/.
+1
Ну так для конкретного юзера URL тоже можно сгенерить.
0
А если злоумышленник составит базу логинов или будет заранее знать нужных ему пользователей.
Это конечно мало вероятно, но все же я считаю, это не очень подходит.
Это конечно мало вероятно, но все же я считаю, это не очень подходит.
+1
В get-запросах стоит передавать то, что заставляет страницы выглядеть определённым образом, чтобы можно было добавлять в закладки. Всё остальное — дурной тон.
GET-запрос легко исправить, тупо изменив его в строке браузера. POST-запрос подделать сложнее, но тоже реально. Но есть механизм сессий. Но есть сниферы. И тут приходит шифрование и HTTPS. И тут злоумышленник тратится или на суперкомпьютер, чтобы поломать ключ, или на паяльник и билет до жертвы, чтобы оказать него желаемое воздействие.
Если вы не пишите систему работы с банковскими платежами, то наверняка вам хватит POST-запросов, механизма сессий и обработки данных для отдельного пользователя только в том случае, если они пришли с того же ip, с каким он прошёл авторизацию.
GET-запрос легко исправить, тупо изменив его в строке браузера. POST-запрос подделать сложнее, но тоже реально. Но есть механизм сессий. Но есть сниферы. И тут приходит шифрование и HTTPS. И тут злоумышленник тратится или на суперкомпьютер, чтобы поломать ключ, или на паяльник и билет до жертвы, чтобы оказать него желаемое воздействие.
Если вы не пишите систему работы с банковскими платежами, то наверняка вам хватит POST-запросов, механизма сессий и обработки данных для отдельного пользователя только в том случае, если они пришли с того же ip, с каким он прошёл авторизацию.
+2
Добавлю в качестве примера, как у меня в текущем проекте происходит проверка перед выполнением действий на сайте в зоне для уже авторизированных пользователей:
1. Есть ли идентификатор пользователя в сессии пользователя (впихивается в $_SESSION при авторизации)?
2. Пришло ли с нашего сайта (по имени сервера)?
3. Пришло ли с того айпишника, с которым этот пользователь зашёл на сайт?
4. Не содержат ли передаваемые данные запрещённые символы?
5. [опционально, зависит от вида действия] Роль пользователя позволяет ему выполнять это действие?
1. Есть ли идентификатор пользователя в сессии пользователя (впихивается в $_SESSION при авторизации)?
2. Пришло ли с нашего сайта (по имени сервера)?
3. Пришло ли с того айпишника, с которым этот пользователь зашёл на сайт?
4. Не содержат ли передаваемые данные запрещённые символы?
5. [опционально, зависит от вида действия] Роль пользователя позволяет ему выполнять это действие?
0
По второму пункту, что будет если у пользователя запрещена передача referer'a?
Он не сможет попасть к Вам на сайт?
Он не сможет попасть к Вам на сайт?
0
До этого сообщения об этом не задумывался, потому что с такими проблемами со стороны пользователя ни разу не сталкивался. В свободное время, наверное, погуглю на эту тему, возможно сделаю проверку по имени сервера желательной, но необязательной. Но, повторюсь, пока таких пользователей не встречал. Возможно, везло.
0
UFO just landed and posted this here
Взломать можно абсолютно всё, это вопрос только времени и денег.
Не совсем понял, в чём суть вашего хака: я же говорю, проверяется корректность введённых данных, в частности по PCRE — пункт номер 4 в моём списке. К тому же, если вы уже авторизировались, то пробили защиту по сессиям и она, как первый уровень обороны уже более для вас не актуальна.
Не совсем понял, в чём суть вашего хака: я же говорю, проверяется корректность введённых данных, в частности по PCRE — пункт номер 4 в моём списке. К тому же, если вы уже авторизировались, то пробили защиту по сессиям и она, как первый уровень обороны уже более для вас не актуальна.
0
В get-запросах стоит передавать то, что заставляет страницы выглядеть определённым образом, чтобы можно было добавлять в закладки. Всё остальное — дурной тон.
GET-запрос легко исправить, тупо изменив его в строке браузера. POST-запрос подделать сложнее, но тоже реально. Но есть механизм сессий. Но есть сниферы. И тут приходит шифрование и HTTPS. И тут злоумышленник тратится или на суперкомпьютер, чтобы поломать ключ, или на паяльник и билет до жертвы, чтобы оказать него желаемое воздействие.
Если вы не пишите систему работы с банковскими платежами, то наверняка вам хватит POST-запросов, механизма сессий и обработки данных для отдельного пользователя только в том случае, если они пришли с того же ip, с каким он прошёл авторизацию.
GET-запрос легко исправить, тупо изменив его в строке браузера. POST-запрос подделать сложнее, но тоже реально. Но есть механизм сессий. Но есть сниферы. И тут приходит шифрование и HTTPS. И тут злоумышленник тратится или на суперкомпьютер, чтобы поломать ключ, или на паяльник и билет до жертвы, чтобы оказать него желаемое воздействие.
Если вы не пишите систему работы с банковскими платежами, то наверняка вам хватит POST-запросов, механизма сессий и обработки данных для отдельного пользователя только в том случае, если они пришли с того же ip, с каким он прошёл авторизацию.
+1
Интересующая Вас тема называется «Cross-site request forgery». Получить дополнительную информацию о ней можно здесь (на англ.) и здесь (на русском).
+3
Спасибо, но все же, какие методы используются для предотвращения этого, там не указанно.
0
Sign up to leave a comment.
GET запросы