PHP и с чем его едят....

[fly]

Sweet orange
Dre.hz, да, изначально туда еще и указатель валюты писался. Но теперь не могу поменять на INT:(
 

[fly]

Sweet orange
Ребятки, а ну подскажите. Допустим есть форма:
HTML:
<form action='login.php' method='post'>
E-mail: <input type='text' name='emailUser'><br />
Пароль: <input type='password' name='passwordUser'><br />
<input type=submit name=submit value=' войти '><br />
<?php=$message;?>
<form>
А дальше есть обработчик этой формы:

PHP:
if (isset($_POST['submit'])) {
	$emailUser=$_POST['emailUser'];
	$passwordUser=md5($_POST['passwordUser']);
	// дальше идет проверка на вводимые данные, аля "пустые поля", "кол-во воодимых символов", "корректность вводимого e-mail'a"
	// и дальше делаю запрос в базу
	include "config.php";
	$q=mysql_query("SELECT * FROM `users` WHERE(`emailUser`='$emailUser')");
	$r=mysql_fetch_array($q);
		if ($r['emailUser']!=$emailUser or $r['passwordUser']!=$passwordUser) { $message="Пароль или e-mail введен не верно!"; }
			else {	
				$_SESSION['user']="yes";	
				$_SESSION['idUser']=$r['idUser'];
				echo "<script type=\"text/javascript\"> window.location.href = \"login.php\" </script>";
			}
	mysql_close($link);
} else;
Но учитывая ошибки, решил обратиться к
PHP:
mysql_real_escape_string()
Но думается мне, что ее одной не достаточно для того, чтобы максимально обезопасить запрос. Поэтому еще решил преобразовать html функцией
PHP:
htmlentities()
В итоге обработка получилась такого вида:

PHP:
$emailUser=mysql_real_escape_string(htmlentities($_POST['emailUser']));
$passwordUser=mysql_real_escape_string(htmlentities(md5($_POST['passwordUser'])));
Теперь сам вопрос: на сколько правильная и безопасная обработка? При том, что запрос остается прежним
PHP:
$q=mysql_query("SELECT * FROM `users` WHERE(`emailUser`='$emailUser')");
 
Останнє редагування:

Dre.hz

Active Member
PHP:
$passwordUser=mysql_real_escape_string(htmllentities(md5($_POST['passwordUser'])));
Теперь сам вопрос: на сколько правильная и безопасная обработка?
С паролем - крайне непрофессионально. Как вы не изощряйтесь, но md5() от любой строки вернет вам 32 символа, в составе которых могут быть только цифры 0-9 и буквы a-f. Как раз md5() это тот случай, когда можно прямо вставлять в SQL-запрос. Почитайте-осмыслите еще раз, от чего именно надо защищаться, вставляя данные в SQL-запрос и как «вредоносный код» модет туда просочиться.

Имейл логичнее валидировать регулярным выражением — убьёте несколько зайцев сразу.
 

[fly]

Sweet orange
E-mail проверяю таким выражением
PHP:
ereg("(^[0-9a-z]+[-\._0-9a-z]*@[0-9a-z]+[-\._^0-9a-z]*[0-9a-z]+[\.]{1}[a-z]{2,6}$)"
Читал про sql-инъекции, видимо не правильно понимаю информацию.
 

x3mal

In Trance
Чтобы обезопасить от подбора пароля, можно например сделать ограничение по количеству запросов с одного IP, либо добавить каптчу.

Чтобы обезопасить от SQL-инъкций mysql_real_escape_string должно быть достаточно.
Суть защиты от SQL-инъекции - заключить переменную в скобки, и не допустить чтобы эти скобки были продублированы в переменной.
 

[fly]

Sweet orange
Знаю, это не сюда. Но в другой ветке не помогут. Есть выпадающий список:
HTML:
<select name="category" size="1">
     <option value="$idCategory">$nameCategory</option>
     <option value="$idCategory">$nameCategory</option>
     <option value="$idCategory">$nameCategory</option>
     <option value="$idCategory">$nameCategory</option>
     <option value="$idCategory">$nameCategory</option>
</select>
Все значения беру из базы.
Теперь вопрос: как мне через этот список передать несколько значений? То есть передать $idCategory и $nameCategory соответственно.
 

PainKiller

Пастафарианец
Команда форуму
Супер Модератор
Знаю, это не сюда. Но в другой ветке не помогут. Есть выпадающий список:
HTML:
<select name="category" size="1">
     <option value="$idCategory">$nameCategory</option>
     <option value="$idCategory">$nameCategory</option>
     <option value="$idCategory">$nameCategory</option>
     <option value="$idCategory">$nameCategory</option>
     <option value="$idCategory">$nameCategory</option>
</select>
Все значения беру из базы.
Теперь вопрос: как мне через этот список передать несколько значений? То есть передать $idCategory и $nameCategory соответственно.
Я бы в таком случае делал бы хеш на стороне сервера, а по id получал бы все данные.
Если критично передавать оба значения, можно запилить формирование JSON при помощи яваскрипта, а функцию вызывать onsubmit.
А можно вообще поле вынести за форму, а яваскриптом формировать форму, которая состоит из hidden полей и затем ее отправлять. Вариантов масса.
 
Зверху