Как сайт может определить, вставил ли пользователь свои собственные значения в URL - PullRequest
0 голосов
/ 15 января 2012

Мне очень любопытно, потому что я хотел бы иметь возможность проверить это сам на своем собственном сайте, так как в настоящее время я нахожусь в процессе его разработки. Примером может быть:

www.somesite.com / product.php? ID = 1356

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

Ответы [ 3 ]

3 голосов
/ 15 января 2012

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

См. https://www.owasp.org/index.php/Top_10_2010-A4 для получения дополнительной информации ипримеры.

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

Поскольку это помечено как электронная коммерция, вам также следует помнить о PCI DSS , если вы еще этого не сделали - где 6.5.4: «Небезопасные прямые ссылки на объекты» относятся именно к этому сценарию.

0 голосов
/ 15 января 2012

Это работает через метод $ _GET (или $ _REQUEST) ...

Причина, по которой вы можете изменить некоторый идентификатор сайта (или любой другой параметр, который является частью URL), и это работает, потому что они запрограммировали его так вести себя. На самом деле это зависит от того, как этот параметр URL используется в фоновом режиме. Например, в product.php у вас будет что-то вроде этого:

if(isset($_GET['id']) {
  $id = $_GET['id'];
  $id = filterid(id)..... and so ...

  // Maybe check for id and redirect if id is not ok
  // Maybe check for id and some additional secrete parameter ...?

  // What is the id? What kind of behavior you want?
}

Причина, по которой у вас разные варианты поведения на разных сайтах - в зависимости от параметров url (в данном случае «id») - кроется в том, что при разных обстоятельствах реализовано разное поведение ...

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

if(isset($_GET['id'] && strlen($_GET['id']) <= 5 && isNumeric($_GET['id']) {
       //if everything is ok you can execute your code here
}
else {
      $id = 1; //if someone try to put something else in id, you will simply redirect him on first id(firs product)
}

Это только один пример поведения. Теперь рассмотрим, что еще можно сделать? Что ты хочешь делать? Как вы хотите, чтобы он вел себя? Какое поведение вы будете реализовывать на своей стороне - в зависимости от параметров внутри URL, полностью зависит от вас. Пользователь может следить за вашей логикой в ​​веб-приложении, нажимая на предварительно определенные ссылки, или он может манипулировать URL-адресом в любое время. У вас нет возможности проверить это. Все, что вы можете сделать, это правильно проверить все входные данные (независимо от того, поступают ли они с URL-адреса или какого-либо почтового запроса)

0 голосов
/ 15 января 2012

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

Facebook делает то же самое.

https://www.facebook.com/profile.php?id=102934810293841029348 переходит на страницу с ошибкой «Профиль недоступен», поскольку этот идентификатор не существует.

Скорее всего, вы просто меняете его на несуществующие идентификаторы.

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