2009-12-07 4 views
2

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

Любые предложения?

ответ

5

Подтверждение данных, которые вы получаете, - отличная идея, если вы ожидаете цифры, убедитесь, что вы получаете цифры.

if(isset($_GET['id']) && ctype_digit($_GET['id'])) 
{ 
    $id = $_GET['id']; 
}else 
{ 
    $id = 0; 
} 

Если беспокойство людей меняется URLs, чтобы видеть вещи, как запрос изображения 44, когда вы только хотели показать им изображение 42 у вас есть несколько вариантов:

  • включает в себя различные проверки на чтобы пользователь имел соответствующее разрешение на использование элемента.
  • Хеш-пункт в URL-адресе, чтобы сделать вещи неизменяемыми.
  • Не используйте последовательные номера, используйте случайные числа или хеши.
+0

Спасибо! Большой совет ...это новно для меня, но вы так говорите, если я добавлю && ctype_digit ($ _ GET ['id'])) { до конца моего if (issest), который должен это сделать? или я должен сделать это и дополнительные проверки пользователей? если да, то что это хороший способ сделать это? –

+1

Добавление проверки ctype_digit() гарантирует, что пользователь имеет только введенные цифры. Пользователь все еще может изменить то, что находится в URL-адресе (например, сменил 44 на 45). Эта проверка не будет отслеживать такую ​​модификацию. – preinheimer

7

Проверьте разрешения сеанса, чтобы проверить, разрешено ли им выполнять действие?

Если им разрешено это сделать, выполните действие. Если нет, то дайте им 403.

+1

+1 для правильного ответа. Вы не можете помещать какую-либо информацию в свой url, которая не полностью видима для конечного пользователя ... Лучшее, что вы можете сделать, это попытаться скрыть ее. Если вы безопасность зависит от других людей, которые не видят сквозь неясность, вы уже потерпели неудачу. Аутентифицируйте пользователя, сохраните эту информацию и используйте ее для проверки разрешений. – Satanicpuppy

2

Я бы предположил, что цифровое подписание запросов на получение и добавление этого URL будет работать.

Подпишите его с помощью закрытого ключа, известного только вашему приложению, а затем хэш-переменные GET и укажите подпись в файле & sig = blahblahblah.

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

3

Если это просто ID (числовой, я думаю), все, что вам нужно сделать, это проверить его как целое:

$id = (int) $_GET['id']; 

Затем вы можете запросить базы данных. Вы получите пустые наборы возвратов, если идентификатор не существует и когда он недействителен (потому что $id будет 0 в этом случае).

+1

(int) присваивает значение целому числу, оно не проверяет его. Если кто-то входит в «23a312», вы получаете 23. – preinheimer

+0

Извините, вот что я имел в виду. Плохая формулировка, я думаю. – Franz

+0

Хотя это все еще можно считать задуманным в моих глазах. – Franz

2

Прежде всего, не полагайтесь на $ _GET для получения важной информации. Всегда проверяйте, имеет ли пользователь разрешение на просмотр этого идентификатора комментария, id блога, что угодно. Что касается фильтрации ID - простой intval() поможет (но не забудьте также обработать 0)

Смежные вопросы