2010-02-22 3 views
0

Можно ли правильно опубликовать пароль isset?функция запуска, если поля формы не являются нулевыми.

Я думаю, что это должно быть if(isset($_POST['username']) && isset(md5($_POST['password']))) - так как он зашифровывает его, но если я обертываю md5 вокруг пароля w/i условным, он не работает должным образом.

if(isset($_POST['username']) && isset($_POST['password'])) { 
//run authentication 
} else { 
//show form 
} 

ответ

1

Брэд, да, все в порядке. В действительности нет никакой пользы для публикации пароля хешированный (не зашифрованный). Во-первых, вы должны использовать javascript для этого, и это легко обойти. Хеширование предоставленного пароля должно выполняться на стороне сервера для сравнения с сохраненным хешированным значением.

Edit:

Plus, выполните следующее и посмотрите, что вы получите:

<?php echo md5(NULL); 

Таким образом, md5 всегда возвращает значение.

Кроме того, попробуйте выполнить следующие действия:

<?php var_dump(isset(md5($_POST['password']))); 

Вы увидите следующее: Fatal error: Can't use function return value in write context

isset() может быть использован только с переменным.

Edit:

Существует разница между hashing и encryption. MD5 - простой хэш, который даже не криптографически защищен.

Да, вы не должны отправлять пароли в текстовом виде на свой сервер, но хешировать их на стороне клиента является то же самое, что и. Вы должны использовать HTTPS для отправки паролей, вот как вы шифруете связи между вашим сервером и клиентом.

+0

Я просто беспокоюсь, что это плохо, чтобы опубликовать пароль Уна-зашифрованные, даже в условном. – Brad

+0

Если вы хотите, чтобы защита паролем использовала SSL. Кроме того, вы больше ничего не можете сделать, что нельзя обойти. –

+0

Брэд: Вы не понимаете, что зашифровано. md5() - это не шифрование, это хеширование. – hobodave

1

Вся цель

if(isset($_POST['username']) && isset($_POST['password'])) { 

, чтобы проверить, если оба параметра POST установлены/доступны. Не существует аутентификации, даже предположения о типе обоих элементов (могут быть строки, массивы, ...). Только «есть ли такой параметр в запросе» и «могу ли я получить доступ к этому элементу без привлечения уведомления: undefined index».

Не будем сравнивать это с isset(md5($_POST['password'])) md5() принимает строку, поэтому md5 ($ _ POST ['password']) делает два предположения.
a) Существует элемент $ _POST ['password'], то, что проверяет «оригинальный» тест.
b) (string) $ _ POST ['password'] имеет смысл, поскольку все, что вы передаете md5(), передается в строку. Если вы передаете массив, результат будет таким же, как и для md5 ('Array');
Плюс md5() всегда возвращает строку (строковое представление хэша для ввода), поэтому isset() всегда истинно и не имеет большого смысла там.(Редактирование: будет всегда верно, если Исеть() может использоваться с возвращаемым значением функции Но он не может, видеть комментарии.)

нижней строке; «Оригинальная» версия служит «четко определенной» цели, версия isset (md5 (..)) не так много ;-)

+0

Это проще даже. isset() не может принимать функцию в качестве входных данных, а md5() будет хешировать что угодно, даже NULL. – hobodave

+0

Вы правы, isset (fn()) вызывает «Неустранимая ошибка: нельзя использовать возвращаемое значение функции в контексте записи». Хорошо, тогда это не только не имеет смысла логичным образом, на практике это невозможно =] И md5 (null) === md5 (''), поскольку (string) null === '' – VolkerK

-2

Если поля находятся в форме, которая отправлена, то эти значения будут всегда be isset. То, что вы, вероятно, хотите проверить, является ли оно пустым. Один простой способ - сравнить с пустой строкой, но это требует, чтобы вы сначала проверяли, установлена ​​ли переменная, иначе, когда форма не была отправлена, вы получите предупреждение «массив не существует». К счастью, есть удобный метод под названием empty(), который проверяет, установлена ​​ли заданная переменная и независимо от того, имеет ли она значение без ложной информации - следовательно, вы обычно хотите проверить, есть ли что-то , а не пустое.

$x = ""; 
!empty($x); // false 
isset($x); // true :(

// beware though: 
$x = "0"; 
!empty($x); // false 

Думайте о нем, как сокращение для этого:

isset($x) && $x != false 
+0

-1: Это doesn ' t действительно затрагивает любое из нескольких фундаментальных недоразумений, которые делает OP. В частности, ОП не показывает ясного понимания того, как работает подача формы, хеширование или шифрование. Что пустое() имеет отношение ко всему? – hobodave

+0

@hobodave Ну, похоже, он пытался сказать, есть ли значения в полях. – nickf

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