Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Безопасный скрипт
 
 автор: Diablo_   (27.06.2006 в 20:40)   письмо автору
 
 

Уважаемые, проверьте, пожалуйста, скрипт! Безопасно ли так писать? И правильно ли?

<?
$login
=$_POST['login'];
$pass=$_POST['pass'];
if(
$login=="" && $pass==""){
echo 
"Не введён пароль и логин";
return;
}

if(
$login==""){
echo 
"Не введён логин";
return;
}

if(
$pass==""){
echo 
"Не введёт пароль";
return;
}

require_once(
"sql.class.php");

$my = new class_sql;
$my->sql_connect();

$my->sql_query="select * from autt where login='".$login."'";
$my->sql_query="select * from autt where pass='".$pass."'";

$my->sql_execute();

if (@
mysql_num_rows($my->sql_res)==0)
    
$login2='Вы не зарегестрированы!';
else
{
    for (
$data1=array(); $row1=mysql_fetch_assoc($my->sql_res); $data1[]=$row1);                
    foreach (
$data1 as $element1)
    {
        
$login2=$element1['login'];
    }
}
echo(
"Добрый день ");echo($login2);
?>

   
 
 автор: Trianon   (27.06.2006 в 21:20)   письмо автору
 
   для: Diablo_   (27.06.2006 в 20:40)
 

Оба ответа: нет.

<?
$login
=$_POST['login'];  $pass=$_POST['pass'];

if(
get_magic_quotes_gpc())  
     
$pass  stripslashes($pass);
else 
$login addslashes($login);
$hash md5($pass);
require_once(
"sql.class.php");

$my = new class_sql;
$my->sql_connect();

$my->sql_query="select count(login) from autt where login='$login' and pass = '$hash'";
$my->sql_execute();

if (@
mysql_num_rows($my->sql_res)!=1)
    
$login2='Вы не зарегестрированы!';
else
    
$login2=echo(htmlspecialchars($_POST['login']);

echo 
"Добрый день, $login2";
?>

   
 
 автор: Diablo_   (27.06.2006 в 22:56)   письмо автору
 
   для: Trianon   (27.06.2006 в 21:20)
 

А пояснить! Почему?

   
 
 автор: Boss   (27.06.2006 в 23:02)   письмо автору
 
   для: Diablo_   (27.06.2006 в 20:40)
 

1) Проверяй все данные $_POST
2) Не храни пароли в открытом виде в БД

   
 
 автор: Diablo_   (27.06.2006 в 23:30)   письмо автору
 
   для: Boss   (27.06.2006 в 23:02)
 

1. я не хранил пароль в открытом виде, просто так написал, для примера!
2. Можите пояснить, что вот это такое?

if(get_magic_quotes_gpc())   
     $pass  = stripslashes($pass); 
else $login = addslashes($login); 

   
 
 автор: Diablo_   (27.06.2006 в 23:35)   письмо автору
 
   для: Diablo_   (27.06.2006 в 23:30)
 

Выдаёт ошибку в 19 строке!

$login2=echo(htmlspecialchars($_POST['login']);

И ещё одно, как проверять все данные $_POST?

   
 
 автор: Ziq   (27.06.2006 в 23:44)   письмо автору
 
   для: Diablo_   (27.06.2006 в 23:35)
 

1. Наверное имелось ввиду $login2 = htmlspecialchars($_POST['login']);
2. Скобка не закрыта и сама конструкция не правильна.

   
 
 автор: Unkind™   (28.06.2006 в 00:11)   письмо автору
 
   для: Diablo_   (27.06.2006 в 23:35)
 

И ещё одно, как проверять все данные $_POST?
По очереди каждую посыламую с формы переменную..

   
 
 автор: valenok   (28.06.2006 в 00:31)   письмо автору
 
   для: Unkind™   (28.06.2006 в 00:11)
 

Можете ещё включить magic_quotes

   
 
 автор: valenok   (28.06.2006 в 00:32)   письмо автору
 
   для: Diablo_   (27.06.2006 в 23:30)
 


if(get_magic_quotes_gpc())    
     $pass  = stripslashes($pass); 
else $login = addslashes($login);

Это значит если пхп както пытается обезопасить ваш код: вырубить безопасность.
Если нет - то можно чтото там поделать для безопасности

   
 
 автор: Boss   (28.06.2006 в 00:34)   письмо автору
 
   для: Diablo_   (27.06.2006 в 23:30)
 

1) И не надо =)
2) http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=19948

   
 
 автор: Diablo_   (28.06.2006 в 01:02)   письмо автору
 
   для: Boss   (28.06.2006 в 00:34)
 

1. Даже если я введу не верный пароль, то авторизует.
2. Если ввести любой логин и любой пароль, всё равно авторизует.
3. А куда подевалась проверка на введён или нет пароль и логин?

[поправлено модератором]

   
 
 автор: Diablo_   (28.06.2006 в 08:54)   письмо автору
 
   для: Diablo_   (28.06.2006 в 01:02)
 

Так его делать то? в Чём ошибка?

   
 
 автор: Trianon   (28.06.2006 в 09:56)   письмо автору
 
   для: Diablo_   (28.06.2006 в 08:54)
 

Пардон. Наврал слегка. Сейчас исправлю.
<? 
$login
=$_POST['login'];  $pass=$_POST['pass']; 

if(
get_magic_quotes_gpc())   
     
$pass  stripslashes($pass); 
else 
$login addslashes($login); 
$hash md5($pass); 
require_once(
"sql.class.php"); 

$my = new class_sql
$my->sql_connect(); 

$my->sql_query="select count(login) from autt where login='$login' and pass = '$hash'"
$my->sql_execute(); 

if (@
mysql_result($my->sql_res,0)!=1
    
$login2='Вы не зарегестрированы!'
else 
    
$login2=echo(htmlspecialchars($_POST['login'])); 

echo 
"Добрый день, $login2"
?>

   
 
 автор: Trianon   (28.06.2006 в 10:09)   письмо автору
 
   для: Diablo_   (28.06.2006 в 01:02)
 

>3. А куда подевалась проверка на введён или нет пароль и
>логин?

а зачем она нужна?

   
 
 автор: Trianon   (28.06.2006 в 10:17)   письмо автору
 
   для: Diablo_   (27.06.2006 в 23:30)
 

>1. я не хранил пароль в открытом виде, просто так написал,
>для примера!
>2. Можите пояснить, что вот это такое?
>>if(get_magic_quotes_gpc())
> $pass = stripslashes($pass);
>else $login = addslashes($login);


Строка логина преобразуется в литеральную константу SQL, для сравнения с полем из таблицы в БД. Путем экранирования спецсимволов. Если она еще не преобразована механизмом магических кавычек.
Если этого не сделать, в скрипте окажется дыра SQL-инъекции, не говоря уже о том, что логины содержащие некотрые символы, не будут нормально обрабатываться.

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

   
 
 автор: valenok   (28.06.2006 в 10:25)   письмо автору
 
   для: Trianon   (28.06.2006 в 10:17)
 

Тоесть вы хотите сказать что когда пользователь проходит регистрацию, хостер нагло отключаеть magic_quotes
но вот когда он авторизируется.. На зло включает..

   
 
 автор: Diablo_   (28.06.2006 в 11:29)   письмо автору
 
   для: valenok   (28.06.2006 в 10:25)
 

Мне все говорили, что проверку на введенияч пароля, нужно делать обязательно!

   
 
 автор: valenok   (28.06.2006 в 11:46)   письмо автору
 
   для: Diablo_   (28.06.2006 в 11:29)
 

если пароль хешируется то проверка бессмысленная.

   
 
 автор: Trianon   (28.06.2006 в 12:36)   письмо автору
 
   для: valenok   (28.06.2006 в 10:25)
 

>Тоесть вы хотите сказать что когда пользователь проходит
>регистрацию, хостер нагло отключаеть magic_quotes
>но вот когда он авторизируется.. На зло включает..
Откуда такой вывод?

   
 
 автор: valenok   (28.06.2006 в 12:38)   письмо автору
 
   для: Trianon   (28.06.2006 в 12:36)
 

Не. Я решил что сказал ерунду какуюто.
Забыл что во второй раз при сверке пароль в базу не уходит

   
 
 автор: Diablo_   (28.06.2006 в 20:41)   письмо автору
 
   для: valenok   (28.06.2006 в 12:38)
 

Извините, что вновь поднимаю эту тему, но код не срабатывает! Постоянно пишит, что не зарегин.!

<?
$login
=$_POST['login'];  $pass=$_POST['pass']; 

if(
get_magic_quotes_gpc())    
     
$pass  stripslashes($pass); 
else 
$login addslashes($login); 
$hash md5($pass); 
require_once(
"sql.class.php"); 

$my = new class_sql
$my->sql_connect(); 


$my->sql_query="select *  from autt where login='$login' and pass = '$hash'"
$my->sql_execute(); 

if (@
mysql_result($my->sql_res,0)!=1
    
$login2='Вы не зарегестрированы!'
else 
    
$login2=htmlspecialchars($_POST['login']); 

echo 
"Добрый день, $login2"
?> 

   
 
 автор: Trianon   (29.06.2006 в 09:46)   письмо автору
 
   для: Diablo_   (28.06.2006 в 20:41)
 

 select count(login)  

Если Вы просите строки пользователей, то проверять надо число строк в запросе.
Если Вы просите число таких строк, то проверять надо сам результат.
<?
$my
->sql_query="select count(login)  from autt where login='$login' and pass = '$hash'"
$my->sql_execute(); 
if (@
mysql_result($my->sql_res,0) != 1
    
$login2='Вы не зарегестрированы!'
else 
    
$login2=htmlspecialchars($_POST['login']); 
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования