X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Безопасность
Panich
Panich
Topic Starter сообщение 2.8.2012, 20:31; Ответить: Panich
Сообщение #1


Посидел над скриптиком безопасности.Кто соображает больше-дайте совет!
[PHP]<?php
session_start();
include ("bd_hell.php");
if (!empty($_POST['login']) and !empty($_POST['name']))
{
$login = mysql_real_escape_string(trim($_POST['login']));
$login = htmlspecialchars($login);
if(get_magic_quotes_gpc())
{
$login = stripslashes($login);
}
$pass = mysql_real_escape_string(trim($_POST['pass']));
$pass = htmlspecialchars($pass);
if(get_magic_quotes_gpc())
{
$pass = stripslashes($pass);
}
if(!preg_match("/^[a-zA-Z0-9_\.\-]$/",$login))
{
header("Location: index.html");
}
else
{
if(!preg_match("/^[a-zA-Z0-9_\.\-]$/",$pass))
{
header("Location: index.html");
}
else
{

$sql = "SELECT * FROM `userlist` WHERE `login`='$login' AND `pass`='$pass' LIMIT 1";
$result = mysql_query($sql, $db)or die("Ошибка в запросе: " . mysql_error());
if (!$result)
{
echo "ошибка - ".mysql_error()."<br>";
echo $sql;
exit();
}
else
{
$myrow = mysql_fetch_assoc($result);
if(!empty($myrow['id']))
{
$_SESSION['id'] = $id;
header("hell.php");
}
else
{
header("Location: index.html");
}
}
}
}
}
else
{
header("Location: index.html");
}
if (isset($_SESSION['id']))
{
$id = intval(mysql_real_escape_string($_SESSION['id']));
if (!preg_match("|^[\d]+$|", $id))
{
header("Location: index.html");
}
else
{
$login = mysql_real_escape_string(trim($_SESSION['login']));
$login = htmlspecialchars($login);
if(get_magic_quotes_gpc())
{
$login = stripslashes($login);
}
$pass = mysql_real_escape_string(trim($_SESSION['pass']));
$pass = htmlspecialchars($pass);
if(get_magic_quotes_gpc())
{
$pass = stripslashes($pass);
}
$sql = "SELECT * FROM `userlist` WHERE `login`='$login' AND `pass`='$pass' LIMIT 1";
$result = mysql_query($sql, $db)or die("Ошибка в запросе: " . mysql_error());
if (!$result)
{
echo "ошибка - ".mysql_error()."<br>";
echo $sql;
exit();
}
else
{
$myrow = mysql_fetch_assoc($result);
if(empty($myrow['id']))
{
header("Location: index.html");
}
}
}
else
{
header("Location: index.html");
}
?>[/PHP]
В частности у меня выдаёт ошибки:
[PHP]Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at Z:\home\localhost\www\rosneft\enterAd.php:1) in Z:\home\localhost\www\rosneft\enterAd.php on line 2
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\localhost\www\rosneft\enterAd.php:1) in Z:\home\localhost\www\rosneft\enterAd.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\rosneft\enterAd.php:1) in Z:\home\localhost\www\rosneft\enterAd.php on line 56
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\rosneft\enterAd.php:1) in Z:\home\localhost\www\rosneft\enterAd.php on line 99
[/PHP]Спасибо за потраченное время...
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 2.8.2012, 22:41; Ответить: Apay
Сообщение #2


см http://www.html.by/threads/9249-CHasto-vst...ull=1#post55412
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Panich
Panich
Topic Starter сообщение 3.8.2012, 0:21; Ответить: Panich
Сообщение #3


Понял!!!Ошибку нашёл!Спасибо!!!
А по безопасности что скажете?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Azazaza_hb
Azazaza_hb
сообщение 3.8.2012, 7:42; Ответить: Azazaza_hb
Сообщение #4


помоему это слишком... зачем все эти функции обработки логина и пароля в первой части кода если вы потом сверяете их с регулярным выражением [a-zA-Z0-9_\.\-], и значения из базы, например id зачем проверять на число? вы что допускаете что там может быть не число? или кто-то может изменить значение в сессии?:wacko:
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Muxa_hb
Muxa_hb
сообщение 3.8.2012, 9:23; Ответить: Muxa_hb
Сообщение #5


у вас неверно сама логика - вы сначала проверяете на пустоту empty(), а только потом уже очищаете от пробелов. т.е. получается, что если ввести обычный пробел в поле ввода - то он пройдет по первому условию, и только потом вы уже убираете пробелы и оно не пройдет..
и получится что будут лишние проверки
(Panich @ 2.8.2012, 23:31) *
[PHP]$result = mysql_query($sql, $db)or die("Ошибка в запросе: " . mysql_error());
************if (!$result)
************{
************echo "ошибка - ".mysql_error()."";[/PHP]

в ифе условие тоже не выполнится в случае ошибки потому что[PHP] or die("Ошибка в запросе: " . mysql_error());[/PHP] die - прерывает выполнение скрипта
(Azazaza_hb @ 3.8.2012, 10:42) *
или кто-то может изменить значение в сессии?

а почему бы и нет? :)


к тому же использование header() после session_start()...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Muxa_hb
Muxa_hb
сообщение 3.8.2012, 9:37; Ответить: Muxa_hb
Сообщение #6


и еще одно. mysql_real_escape_string() добавляет экранирование. если будет что экранировать, к примеру Д'Артаньян какой нибудь - то регулярка его уже не пропустит - ни слэша, ни ' в разрешенных литералах нет, зато есть точка и дефис (дефис еще ладно, но зачем точка - я лично не понимаю)
и соответственно использование mysql_real_escape_string() совместо с htmlspecialchars приведет к экранированию не тех символов.. к примеру кавычка проэкранируется как \&quot; и что в базу уйдет?

и по вашей регулярке, так как не указано число символов - один символ вполне проходит как нормальный - т.е. у вас можно региться как A к примеру с паролем B
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Muxa_hb
Muxa_hb
сообщение 3.8.2012, 10:10; Ответить: Muxa_hb
Сообщение #7


[PHP]<?php ob_start();
session_start();
include ("bd_hell.php");
$login = trim($_POST['login'];
$pass = trim($_POST['pass']);
if(empty($login) || empty($pass)) {
echo "Вы заполнили не все поля!";
}
else {
if(get_magic_quotes_gpc())
{
$login = stripslashes($login);
$pass = stripslashes($pass);
}
$login = mysql_real_escape_string(strip_tags($login));
$pass= mysql_real_escape_string(strip_tags($pass));
if(!preg_match("/^[A-z]+?[A-z0-9]{4,15}+$/ui",$login)) echo("Неверный формат логина");
else {
if(!preg_match("/^[A-z]+?[A-z0-9]{4,15}+$/ui",$pass)) echo("Неверный формат пароля");
else {
$sql = sprintf("SELECT `login`,`pass` FROM `userlist` WHERE `login`='%s' AND `pass`='%s'",$login,$pass);
$result = mysql_query($sql, $db);
if($result) {
//все ок
$_SESSION['login']=$login;
}
else {
echo "Ошибка!";
}
}
}[/PHP]
:D
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Panich
Panich
Topic Starter сообщение 3.8.2012, 10:31; Ответить: Panich
Сообщение #8


Спасибо,применяю к работе!
Кстати,а в чём разнице между с BUM т без BOM?

Всё сделал как Вы советовали:пользователь вводит логин и пароль-передаётся обработчику,который если "плохо",то на index.html,а если нормально,то на нужную страницу-на нужной страницу проверяю:
[PHP]if (isset($_SESSION['id']))[/PHP]
,но всё время проверяет условие "else"-как быть?В чём причина может скрываться?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Azazaza_hb
Azazaza_hb
сообщение 3.8.2012, 13:29; Ответить: Azazaza_hb
Сообщение #9


здесь написано про BOM http://ru.wikipedia.org/wiki/Byte_order_mark
он добавляется в самом начале файла и выводится первым, и если вы хотите послать какието заголовки то будет ошибка тпа "Cannot send session cookie - headers already sent by ..." потому что заголовки можно посылать до вывода данных. Поэтому сохраняйте в UTF8 без BOM

если используете в коде сессии, то надо в начале файла писать session_start();
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Panich
Panich
Topic Starter сообщение 3.8.2012, 14:27; Ответить: Panich
Сообщение #10


О!Спасибо...не знал даже!!!
Да что уж там-ВСЕМ БОЛЬШОЕ СПАСИБО!!!

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Нужен копирайт, информационная безопасность
3 Petechka 2769 29.9.2019, 20:08
автор: A_Lika
Открытая тема (нет новых ответов) Безопасность и конфиденциальность информации
0 AlexKO 2736 1.7.2012, 1:19
автор: -AlexKO-
Открытая тема (нет новых ответов) Размешаю статьи - Компьютерная безопасность
0 ilyazh_hb 3527 6.8.2008, 23:22
автор: -ilyazh-


 



RSS Текстовая версия Сейчас: 28.3.2024, 12:22
Дизайн