2012-04-30 9 views
0

Итак, я не являюсь разработчиком бэкэнд, но мне нужно разработать базовый пароль. (Совершенно необоснованный) клиент специально сказал, что ему нужен только ввод пароля. Никакое имя пользователя или какая-либо другая информация не может быть передана. Поскольку нет ни одного пользователя, есть только один пароль, который я закодировал непосредственно в скрипте. Выглядит что-то наподобие:Основная проблема безопасности PHP

$password = $_POST['password'] 

if ($password == 'mypass') { 

do something.... 

} 

Является ли это уязвимым для какой-то инъекции? Есть ли еще какие-то огромные дыры в безопасности, о которых я должен беспокоиться?

+0

Вы можете сравнить хешированный проход с заранее вычисленным хэшем вместо открытого текста, но если кто-то может прочитать ваш источник, чтобы найти проход, у вас уже есть большие проблемы. :-) – Wiseguy

+0

Надеюсь, что если вы отправляете пароль по проводу, вы, по крайней мере, используете SSL. –

ответ

3

Является ли это уязвимым для какого-то инъекционного взлома?

Нет, потому что вы ничем не вводите ничего.

Есть ли еще какие-то огромные дыры в безопасности, о которых я должен беспокоиться?

  • Он имеет очень низкую энтропию, злоумышленник просто автоматически пытается случайные пароли не должно быть слишком много проблем при получении. Вы, вероятно, знаете об этом.
  • Если ваш сервер был когда-либо нарушен и/или обнаружен исходный код, жесткий пароль будет раскрываться и использоваться мгновенно. Вы могли бы хотя бы соль и хеш, чтобы это не допустить.
+0

Ahhh yeah, хеширование - действительно хорошая идея. – Thomas

1

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

Я бы предложил хешировать ваш пароль и использовать srtcmp вместо оператора ==.

+2

И strcmp улучшит ситуацию ... как? пароли либо равны, либо нет. Говорить пользователю, что их pw attemp - это «<','=','>», просто приведет к игре с угадыванием 20 вопросов и сделает намного легче взломать компьютер. –

1

Существует сценарий, в котором это открыто для атаки, от которого вы можете или не можете пострадать.

Ваш пример требует, чтобы пользователь отправлял пароль и, что важно, не указывал, что он поддерживает сеанс на стороне сервера. Если сеанс не использовался, это будет означать, что будут защищены только страницы, содержащие этот код и на которые будет отправляться пароль.

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

например. Если ваш сайт был страницы в

  1. http://example.com/общественного
  2. http://example.com/admin/частного & защищенного
  3. http://example.com/admin/users.phpчастного & не защищен

malicous пользователь может получить доступ к/администратору/пользователям .php напрямую, полностью mventing вашего механизма авторизации.

0

Всегда используйте одностороннее хеширование, где это возможно, для хранения в таблице db или жесткого кодирования. Вместо жесткого кодирования текстового пароля вы можете жестко задавать хеш-значение MD5 пароля. Затем вычислите хэш ввода от пользователя, а затем сравните оба. Таким образом, вы действительно боитесь, что кто-то украдет ваш код и проведет с ним пароли.