[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Разбор задачи от twin'a
Xpund
Условия задачи [URL=http://phpforum.ru/index.php?act=ST&f=125&t=19168&st=0#entry134769'>тут</a>.

<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);

//--Конектимся к базе-//
mysql_connect("localhost","user","password");
mysql_select_db("test");


if($_GET['id'])
{
$query = mysql_query("SELECT * FROM `names` WHERE id='".$_GET['id']."'");
$row = mysql_fetch_assoc($query);
$row['name'] = htmlspecialchars($row['name']);
$row['date'] = htmlspecialchars($row['date']);
echo "User <b>".$row['name']."</b> register: ".$row['date']."<hr>";
}


if (isset ($_GET['search_click']))
{
if (isset ($_GET['search']))
{

$search = $_GET['search'];
$search = mysql_real_escape_string($search);


$poisk = "SELECT * FROM `names`
WHERE `name` LIKE '%"
.$search."%'
"
;

$query = mysql_query($poisk) or die (mysql_error());
$row = mysql_num_rows($query);

if ($row)
{
echo "User searching: <font color=blue><b>".$row."</b></font><br>";
while ($searching = mysql_fetch_assoc($query))
{
$searching['name'] = htmlspecialchars($searching['name']);
echo "".$searching['name']." <br>";
}
}

else
{
echo "Net CoBTTadenui<br>";
}
}
}

if ($_POST['submit'])
{
if (!empty ($_POST['register']))
{

$login = $_POST['register'];
$login = mysql_real_escape_string($login);

//Проверяем на наличае юзера в базе
$query = "SELECT name
FROM `names`
WHERE `name`='"
.$login."'
"
;
$row = mysql_query($query) or die (mysql_error());
if (mysql_num_rows($row) > 0)
{
echo "Takoi user imeetsya ili proizoLLIJIa OLLIu6Ka<br><hr>";
}
else {

//Если всё гуд, то регистрируем

mysql_query("
INSERT INTO `names` (`name`)
VALUES ('"
.$login."')
"
);
header('Location: http://xpund.ru/index123123.php ');
}
}
}


$query = mysql_query("SELECT * FROM `names` ORDER BY `id` DESC");
echo "<UL TYPE=square>";
while ($users = mysql_fetch_assoc($query))
{
$users['name'] = htmlspecialchars($users['name']);
echo "<li><a href= ?id=".$users['id'].">".$users['name']."</a><br>";
}
echo "</ul>";
?>
<html>
<
head>
<
title>My First Lesson</title>
</
head>

<
body>
<
br>
Search<br />
<
form method="GET" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
<
input type="text" name="search" value="<?php echo $_GET['search']; ?>"><br />
<
input type="submit" name="search_click" value="search">
</
form>
<
br />

Register<br />
<
form method="POST" action ='<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>'>
<
input type=text name="register"><br />
<
input type=submit name="submit" value="Register">
</
form>

Тест: http://xpund.ru/index123123.php

Слушаю вашу критику
Хост на вы с русским, так что пока так.

Буду переодически обновлять первый пост!



Спустя 52 минуты, 22 секунды (4.10.2010 - 19:40) fire написал(а):
хех, используй intval() для обрамления $_GET['id'] в запросе, иначе у тебя в скрипте sql inj smile.gif Кстати можно использовать и mysql_real_escape_string(), как ты делал при регистрации. Есть еще xss через $_SERVER['PHP_SELF'] и $_GET['search'].

http://xpund.ru/index123123.php?id=-50+uni...8%29,user%28%29
http://xpund.ru/index123123.php?search=%22...ch_click=Search
http://xpund.ru/index123123.php/%22%3E%3Cs...29%3C/script%3E

Спустя 4 минуты, 37 секунд (4.10.2010 - 19:45) Xpund написал(а):
fire
хех, спс. Завтра поправлю. Буду ждать ещё критик)

Спустя 12 минут, 33 секунды (4.10.2010 - 19:57) phz написал(а):
А к чему тут htmlspecialchars и str_replace:

$login = mysql_real_escape_string(htmlspecialchars(trim(str_replace($login))));


Может лучше так?

$login = mysql_real_escape_string($login);


А если мой ник: <phz>, то тогда в базе будет искать: &lt;phz&gt; И также записано? А это str_replace тут зачем? Чёт я не понимаю этих двойных презервативов.

Спустя 1 час, 39 минут, 31 секунда (4.10.2010 - 21:37) twin написал(а):
Приведи код в порядок. В такой каше разбираться - глаза поломаешь. sad.gif

Вот тут почитай про стиль.

Чет тест не работает. На любое поползновение выдает это:
Цитата
Takoi user imeetsya ili proizoLLIJIa OLLIu6Ka

Спустя 5 часов, 28 минут, 38 секунд (5.10.2010 - 03:05) Xpund написал(а):
Исправил тест.
Стиль вечером переделаю.

Спустя 4 часа, 50 минут, 37 секунд (5.10.2010 - 07:56) Xpund написал(а):
Немного подправил оформление. От xss не пойму как защититься(

Спустя 30 минут, 51 секунда (5.10.2010 - 08:27) Xpund написал(а):
А лучше так
           $login = $_POST['register'];

$login = mysql_real_escape_string(htmlspecialchars(trim($login)));

ИЛи
           $_POST['register'] = mysql_real_escape_string(htmlspecialchars(trim($_POST['register'])));


$login = $_POST['register'];

Спустя 5 минут, 1 секунда (5.10.2010 - 08:32) twin написал(а):
Ну вот, теперь куда как приятнее читать. smile.gif

Цитата
А лучше так

ИЛи

Оба варианта фтопку. Поройся в решениях, там все есть, и про XSS и про это.

Спустя 42 минуты, 41 секунда (5.10.2010 - 09:14) Basili4 написал(а):
в крайнем случае mysql_real_escape_string($login); так

Спустя 7 минут, 40 секунд (5.10.2010 - 09:22) Xpund написал(а):
Я всёравно не понимаю, где когда что закрывать(Я про htmlspecialchars и тп)...

Спустя 1 минута, 30 секунд (5.10.2010 - 09:24) Xpund написал(а):
Basili4
То есть
$login = mysql_real_escape_string($login);

А в запросе:
               mysql_query("
INSERT INTO `names` (`name`)
VALUES ('"
.htmlspecialchars($login)."')
"
);

Спустя 13 минут, 16 секунд (5.10.2010 - 09:37) Basili4 написал(а):
Xpund
везде mysql_real_escape_string

htmlspecialchars использовать при выводе в браузер

Спустя 1 минута, 27 секунд (5.10.2010 - 09:38) ApuktaChehov написал(а):
Xpund - вам надо понять, что htmlspecialchars заменяет специальные HTML символы на их буквенное представление. Зачем?
Вот смотрите:
<script type="text/javascript">
alert('Этот скрипт не работает, а просто отображается на экране');
</script>
Вот для этого и нужно использовать htmlspecialchars, если не обрабатывать данные htmlspecialchars, то скрипты начнут выполняться и тогда будет ППЦ.
Я смогу прочитать ваши куки, подгрузить на страницу другие скрипты и много, много чего еще

А mysql_real_escape_string, применяется совершенно в другой области.
mysql_real_escape_string - защищает SQL запросы от инъекций.

По этому нужно запомнить, mysql_real_escape_string защита при введении данные в БД, а htmlspecialchars - защита при выведении данных из БД.

Т.е. когда вы что то показываете на странице, нужно обязательно htmlspecialchars, а когда вы от юзера или еще откуда-нибудь записываете информацию в БД, то нужно юзать mysql_real_escape_string.

Спустя 7 минут, 8 секунд (5.10.2010 - 09:45) Xpund написал(а):
Исправил, но ничего хорошего нету(

Спустя 2 минуты, 37 секунд (5.10.2010 - 09:48) ApuktaChehov написал(а):
В смысле? А что должно быть хорошее?

Спустя 46 секунд (5.10.2010 - 09:49) Xpund написал(а):
Ну хсс всёравно работает. Подскажите как правлельно подправить.

Спустя 3 минуты, 19 секунд (5.10.2010 - 09:52) ApuktaChehov написал(а):
Покажите код, где вы обрабатываете вывод

Спустя 8 минут, 1 секунда (5.10.2010 - 10:00) Xpund написал(а):
$users['name'] = htmlspecialchars($users['name']);
Так же с поиском.

Спустя 5 минут, 40 секунд (5.10.2010 - 10:06) ApuktaChehov написал(а):
Весь код, в месте с выводом в браузер.

Спустя 47 секунд (5.10.2010 - 10:07) Xpund написал(а):
$query = mysql_query("SELECT * FROM `names` ORDER BY `id` DESC");
echo "<UL TYPE=square>";
while ($users = mysql_fetch_assoc($query))
{
$users['name'] = htmlspecialchars($users['name']);
echo "<li><a href= ?id=".$users['id'].">".$users['name']."</a><br>";
}
echo "</ul>";

Спустя 15 минут, 41 секунда (5.10.2010 - 10:22) ApuktaChehov написал(а):
Все верно и должно работать.
Ищите, может у вас в другом месте, происходит вывод в поток.

И еще, откройте в браузере исходный код страницы, найдите место где у вы XSS и посмотрите что туда попадает.

Спустя 2 минуты, 4 секунды (5.10.2010 - 10:24) Xpund написал(а):
Во втором посте. Оба хсс работают.

Спустя 3 минуты, 4 секунды (5.10.2010 - 10:27) ApuktaChehov написал(а):
Я смотрел по вашей ссылке.
У вас, при выводе списка юзеров, все хорошо, а при нажатии на имя, происходит XSS.

Спустя 5 минут, 16 секунд (5.10.2010 - 10:33) Xpund написал(а):

Спустя 6 минут, 3 секунды (5.10.2010 - 10:39) ApuktaChehov написал(а):
Весь скрипт еще раз скиньте.
Я так понял, у вас из GET массива данные прямо в поток выводятся.

Спустя 1 минута, 39 секунд (5.10.2010 - 10:40) Xpund написал(а):
Свернутый текст
<?php


//--Конектимся к базе-//
mysql_connect("localhost","user","pass");
mysql_select_db("db");


if($_GET['id'])
{
$_GET['id'] = htmlspecialchars($_GET['id']);
$query = mysql_query("SELECT * FROM `names` WHERE id=".$_GET['id']."");
$row = mysql_fetch_assoc($query);
$row['name'] = htmlspecialchars($row['name']);
echo "User <b>".$row['name']."</b> register: ".$row['date']."<hr>";
}


if (isset ($_GET['search_click']))
{
if (isset ($_GET['search']))
{

$search = $_GET['search'];
$_GET['search'] = htmlspecialchars($_GET['search']);
$search = mysql_real_escape_string($search);


$poisk = "SELECT * FROM `names`
WHERE `name` LIKE '%"
.$search."%'
"
;

$query = mysql_query($poisk) or die (mysql_error());
$row = mysql_num_rows($query);

if ($row)
{
echo "User searching: <font color=blue><b>".$row."</b></font><br>";
while ($searching = mysql_fetch_assoc($query))
{
$searching['name'] = htmlspecialchars($searching['name']);
echo "".$searching['name']." <br>";
}
}

else
{
echo "Net CoBTTadenui<br>";
}
}
}

if ($_POST['submit'])
{
if (isset ($_POST['register']) && $_POST['register'] != "")
{

$login = $_POST['register'];
$_POST['register'] = htmlspecialchars($_POST['register']);

$login = mysql_real_escape_string($login);

//Проверяем на наличае юзера в базе
$query = "SELECT name
FROM `names`
WHERE `name`='"
.$login."'
"
;
$row = mysql_query($query) or die (mysql_error());
if (mysql_num_rows($row) > 0)
{
echo "Takoi user imeetsya ili proizoLLIJIa OLLIu6Ka<br><hr>";
}
else {

//Если всё гуд, то регистрируем

mysql_query("
INSERT INTO `names` (`name`)
VALUES ('"
.$login."')
"
);
header('Location: http://xpund.ru/index123123.php ');
}
}
}


$query = mysql_query("SELECT * FROM `names` ORDER BY `id` DESC");
echo "<UL TYPE=square>";
while ($users = mysql_fetch_assoc($query))
{
$users['name'] = htmlspecialchars($users['name']);
echo "<li><a href= ?id=".$users['id'].">".$users['name']."</a><br>";
}
echo "</ul>";
?>
<html>
<
head>
<
title>My First Lesson</title>
</
head>

<
body>
<
br>
Search<br />
<
form method="GET" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<
input type="text" name="search" value="<?php echo $_GET['search']; ?>"><br />
<
input type="submit" name="search_click" value="Search">
</
form>
<
br />

Register<br />
<
form method="POST" action =''>
<
input type=text name="register"><br />
<
input type=submit name="submit" value="Register">
</
form>

Ну вот последний вариант.

Спустя 11 минут, 6 секунд (5.10.2010 - 10:51) ApuktaChehov написал(а):
А как оно у вас туда попадает?
У меня ваш скрипт подобные вещи не делает.

Спустя 2 минуты, 50 секунд (5.10.2010 - 10:54) Xpund написал(а):
Цитата (ApuktaChehov @ 5.10.2010 - 07:51)
А как оно у вас туда попадает?

Кто? Оно

Спустя 59 секунд (5.10.2010 - 10:55) ApuktaChehov написал(а):
/%22%3E%3Cs...29%3C/script%3E

Спустя 2 минуты, 4 секунды (5.10.2010 - 10:57) ApuktaChehov написал(а):
А.. т.е. тупо в строку адресную вводиться. Понял...

Спустя 28 секунд (5.10.2010 - 10:58) Xpund написал(а):
Верно, просто вводом.

Спустя 2 минуты, 50 секунд (5.10.2010 - 11:01) ApuktaChehov написал(а):
Нашел:
сделайте так:
<form method="GET" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">

Спустя 2 минуты, 11 секунд (5.10.2010 - 11:03) Xpund написал(а):
Отлично, но это -
http://xpund.ru/index123123.php?id=-50+uni...8%29,user%28%29
Ещё работает(

Спустя 1 минута, 43 секунды (5.10.2010 - 11:05) ApuktaChehov написал(а):
Дело в том, что $_SERVER['PHP_SELF'] - содержит имя скрипт от корневой директории стайта, т.е. все что после домена.
Так и получается, если в вашу форму подставить:
<form method="GET" action="http://xpund.ru/index123123.php/"><script>alert(/xss/)</script>

Вот и получится XSS

Спустя 4 минуты, 59 секунд (5.10.2010 - 11:10) Xpund написал(а):
ApuktaChehov
Большое спасибо.
Ну и всё же как решить последний вариант?

Спустя 5 минут, 46 секунд (5.10.2010 - 11:15) ApuktaChehov написал(а):
У... А это все вот почему:
Смотрите внимательно:
$query = mysql_query("SELECT * FROM `names` WHERE id=".$_GET['id']."");

На языке SQL это все выглядит так:
SELECT * FROM `names` WHERE id = 4;


Смотрите внимательно у вас, в этом случае, 4 не обрамлена кавычками. А следовательно, учитывая специфику SQL, эта 4 не является строкой.
Далее в место этого числа, можно подставить все что угодно и, с точки зрения SQL, - это будут обычные команды, такие как -50+union+select+1,version(),user();
Вот что получилось:
SELECT * FROM `names` WHERE id = -50+union+select+1,version(),user();


Избавиться от этого ООООЧень просто, нужно тупо, в запрос, добавить кавычки, вот так:
$query = mysql_query("SELECT * FROM `names` WHERE id='".$_GET['id']."'");


Теперь на языке SQL все выглядит вот так:
SELECT * FROM `names` WHERE id = '-50+union+select+1,version(),user()';

'-50+union+select+1,version(),user()' - является обычно строкой, а не набором команд.

Вот и все wink.gif

Спустя 5 минут, 32 секунды (5.10.2010 - 11:21) Xpund написал(а):
О_о я думал что в цифровом поле - это не имеет значения.

Тогда вот:
Свернутый текст

<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);

//--Конектимся к базе-//
mysql_connect("localhost","user","password");
mysql_select_db("test");


if($_GET['id'])
{
$_GET['id'] = htmlspecialchars($_GET['id']);
$query = mysql_query("SELECT * FROM `names` WHERE id='".$_GET['id']."'");
$row = mysql_fetch_assoc($query);
$row['name'] = htmlspecialchars($row['name']);
echo "User <b>".$row['name']."</b> register: ".$row['date']."<hr>";
}


if (isset ($_GET['search_click']))
{
if (isset ($_GET['search']))
{

$search = $_GET['search'];
$_GET['search'] = htmlspecialchars($_GET['search']);
$search = mysql_real_escape_string($search);


$poisk = "SELECT * FROM `names`
WHERE `name` LIKE '%"
.$search."%'
"
;

$query = mysql_query($poisk) or die (mysql_error());
$row = mysql_num_rows($query);

if ($row)
{
echo "User searching: <font color=blue><b>".$row."</b></font><br>";
while ($searching = mysql_fetch_assoc($query))
{
$searching['name'] = htmlspecialchars($searching['name']);
echo "".$searching['name']." <br>";
}
}

else
{
echo "Net CoBTTadenui<br>";
}
}
}

if ($_POST['submit'])
{
if (isset ($_POST['register']) && $_POST['register'] != "")
{

$login = $_POST['register'];
$_POST['register'] = htmlspecialchars($_POST['register']);

$login = mysql_real_escape_string($login);

//Проверяем на наличае юзера в базе
$query = "SELECT name
FROM `names`
WHERE `name`='"
.$login."'
"
;
$row = mysql_query($query) or die (mysql_error());
if (mysql_num_rows($row) > 0)
{
echo "Takoi user imeetsya ili proizoLLIJIa OLLIu6Ka<br><hr>";
}
else {

//Если всё гуд, то регистрируем

mysql_query("
INSERT INTO `names` (`name`)
VALUES ('"
.$login."')
"
);
header('Location: http://xpund.ru/index123123.php ');
}
}
}


$query = mysql_query("SELECT * FROM `names` ORDER BY `id` DESC");
echo "<UL TYPE=square>";
while ($users = mysql_fetch_assoc($query))
{
$users['name'] = htmlspecialchars($users['name']);
echo "<li><a href= ?id=".$users['id'].">".$users['name']."</a><br>";
}
echo "</ul>";
?>
<html>
<
head>
<
title>My First Lesson</title>
</
head>

<
body>
<
br>
Search<br />
<
form method="GET" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
<
input type="text" name="search" value="<?php echo $_GET['search']; ?>"><br />
<
input type="submit" name="search_click" value="search">
</
form>
<
br />

Register<br />
<
form method="POST" action ='<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>'>
<
input type=text name="register"><br />
<
input type=submit name="submit" value="Register">
</
form>


Спасибо Апутка, буду ждать других замечаний.

Спустя 1 минута, 28 секунд (5.10.2010 - 11:22) ApuktaChehov написал(а):
Цифровом поле? Что за цифровое поле?

Спустя 10 минут, 5 секунд (5.10.2010 - 11:32) Xpund написал(а):
ApuktaChehov
В поле id используються только цифровые значения.

Спустя 1 минута, 8 секунд (5.10.2010 - 11:34) ApuktaChehov написал(а):
Тогда ее нужно принудительно приводить к числу: (int)$_GET['id'].

Спустя 1 минута, 34 секунды (5.10.2010 - 11:35) Xpund написал(а):
ApuktaChehov
Понятно.
А ещё будут какие-либо замечания по коду?

Спустя 2 минуты, 37 секунд (5.10.2010 - 11:38) Basili4 написал(а):
if (isset ($_POST['register']) && $_POST['register'] != "")

это можно заменить на
if (!empty ($_POST['register']))

Спустя 6 минут, 57 секунд (5.10.2010 - 11:45) ApuktaChehov написал(а):
Это не нужано:
$_GET['id'] = htmlspecialchars($_GET['id']);

А вот $row['date'] не обрабатывается htmlspecialchars.
$search = $_GET['search'];
$_GET['search'] = htmlspecialchars($_GET['search']);
$search = mysql_real_escape_string($search);


Это все что значит?
Достаточно:
$search = mysql_real_escape_string($_GET['search']);


$_POST['submit'] - нужно проверять ее существование с помощью isset()

$login = $_POST['register'];
$_POST['register'] = htmlspecialchars($_POST['register']);


Как вы это себе логически представляете?
Сначала вы содержимое $_POST['register'] передаете в $login, а после чего, обрабатываете $_POST['register']. Думаете в $login данные будут обработанными?

Вот этого достаточно:
$login = mysql_real_escape_string($_POST['register']);


В конце, $users['id'] так же не обрабатывается htmlspecialchars.

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

Спустя 2 минуты, 14 секунд (5.10.2010 - 11:47) Xpund написал(а):
Ой, я забыл удалить.
и $row['date'] щас поставлю на обработку!

В первом посте поправил.

Спустя 25 минут, 44 секунды (5.10.2010 - 12:13) twin написал(а):
Код не правь в первом посте, выкладывай новый. Не удобно прыгать по всему топику.

Пока увидел:
1. XSS в полный рост.
2. Символы % и _ ищутся некорректно.

Спустя 4 часа, 30 минут, 52 секунды (5.10.2010 - 16:43) Xpund написал(а):
twin
По поводу % я поищю как поправить, а на счёт хсс, понятия не имею(

Спустя 24 минуты, 43 секунды (5.10.2010 - 17:08) twin написал(а):
А вот засунь в поле поиска это
"><iframe="http://sex.ru" />

Это самя легкая форма XSS

Спустя 5 минут, 19 секунд (5.10.2010 - 17:14) Xpund написал(а):
"> - вот это осталось, а сам фрейм не показывает
Вот последний вариант нормальный поиск % и _

Свернутый текст
<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);

//--Конектимся к базе-//
mysql_connect("localhost","user","pass");
mysql_select_db("name");




if($_GET['id'])
{
$query = mysql_query("SELECT * FROM `names` WHERE id='".$_GET['id']."'");
$row = mysql_fetch_assoc($query);
$row['name'] = htmlspecialchars($row['name']);
$row['date'] = htmlspecialchars($row['date']);
echo "User <b>".$row['name']."</b> register: ".$row['date']."<hr>";
}


if (isset ($_GET['search_click']))
{
if (isset ($_GET['search']))
{

$search = $_GET['search'];
$search = mysql_real_escape_string($search);


$poisk = "SELECT * FROM `names`
WHERE `name` LIKE '%%"
.addcslashes($search, '%_')."%%'
"
;

$query = mysql_query($poisk) or die (mysql_error());
$row = mysql_num_rows($query);

if ($row)
{
echo "User searching: <font color=blue><b>".$row."</b></font><br>";
while ($searching = mysql_fetch_assoc($query))
{
$searching['name'] = htmlspecialchars($searching['name'], ENT_COMPAT);
echo "".$searching['name']." <br>";
}
}

else
{
echo "Net CoBTTadenui<br>";
}
}
}

if ($_POST['submit'])
{
if (!empty ($_POST['register']))
{

$login = $_POST['register'];
$login = mysql_real_escape_string($login);

//Проверяем на наличае юзера в базе
$query = "SELECT name
FROM `names`
WHERE `name`='"
.$login."'
"
;
$row = mysql_query($query) or die (mysql_error());
if (mysql_num_rows($row) > 0)
{
echo "Takoi user imeetsya ili proizoLLIJIa OLLIu6Ka<br><hr>";
}
else
{

//Если всё гуд, то регистрируем

mysql_query("
INSERT INTO `names` (`name`)
VALUES ('"
.$login."')
"
);
header('Location: http://xpund.ru/index123123.php ');
}
}
}


$query = mysql_query("SELECT * FROM `names` ORDER BY `id` DESC");
echo "<UL TYPE=square>";
while ($users = mysql_fetch_assoc($query))
{
$users['name'] = htmlspecialchars($users['name']);
echo "<li><a href= ?id=".$users['id'].">".$users['name']."</a><br>";
}
echo "</ul>";
?>
<html>
<
head>
<
title>My First Lesson</title>
</
head>

<
body>
<
br>
Search<br />
<
form method="GET" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
<
input type="text" name="search" value="<?php echo $_GET['search']; ?>"><br />
<
input type="submit" name="search_click" value="search">
</
form>
<
br />

Register<br />
<
form method="POST" action =''>
<
input type=text name="register"><br />
<
input type=submit name="submit" value="Register">
</
form>

Спустя 3 часа, 49 минут, 42 секунды (5.10.2010 - 21:03) twin написал(а):
По стилю - огромнейший прогресс. Теперь приятно читать. smile.gif

А по функционалу пока не очень. Мне кажется ты даже не запускал. При первом запуске нотис - неопределен элемент массива
<input type="text" name="search" value="<?php echo $_GET['search']; ?>"><br />


Дальше, хотел зарегаться, хидер ругается. Он прав - выше него echo стоит.
Соответственно никакого редиректа. После него, кстати, нужно ставить exit()
Еще нотис -
    if($_GET['id'])
опять наглое обращение.

Магические кавычки проигнорировал.
XSS тоже до сих пор цветет и пахнет.

Но ты на правильном пути. Уже очень на много лучше, чем первый вариант.

Не здавайся, добей её до конца. Потом тебе сам черт нестрашен будет. smile.gif

Спустя 11 часов, 50 минут, 36 секунд (6.10.2010 - 08:54) Xpund написал(а):
На счёт кавычек не знаю правильно сделал или нет.
Вот как бы:
<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);

//--Конектимся к базе-//
mysql_connect("localhost","user","pass");
mysql_select_db("db");

if (get_magic_quotes_gpc()) {
$_GET = stripslashes_array($_GET);
$_POST = stripslashes_array($_POST);
// COOKIE не стал добавлять
}



if(isset ($_GET['id']))
{
$query = mysql_query("SELECT * FROM `names` WHERE id='".$_GET['id']."'");
$row = mysql_fetch_assoc($query);
$row['name'] = htmlspecialchars($row['name']);
$row['date'] = htmlspecialchars($row['date']);
echo "User <b>".$row['name']."</b> register: ".$row['date']."<hr>";
}


if (isset ($_GET['search_click']))
{
if (isset ($_GET['search']))
{

$search = $_GET['search'];
$search = mysql_real_escape_string($search);


$poisk = "SELECT * FROM `names`
WHERE `name` LIKE '%%"
.addcslashes($search, '%_')."%%'
"
;

$query = mysql_query($poisk) or die (mysql_error());
$row = mysql_num_rows($query);

if ($row)
{
echo "User searching: <font color=blue><b>".$row."</b></font><br>";
while ($searching = mysql_fetch_assoc($query))
{
$searching['name'] = htmlspecialchars($searching['name'], ENT_COMPAT);
echo "".$searching['name']." <br>";
}
}

else
{
echo "Net CoBTTadenui<br>";
}
}
}

if ($_POST['submit'])
{
if (!empty ($_POST['register']))
{
header('Location: http://xpund.ru/index123123.php ');
$login = $_POST['register'];
$login = mysql_real_escape_string($login);

//Проверяем на наличае юзера в базе
$query = "SELECT name
FROM `names`
WHERE `name`='"
.$login."'
"
;
$row = mysql_query($query) or die (mysql_error());
if (mysql_num_rows($row) > 0)
{
echo "Takoi user imeetsya ili proizoLLIJIa OLLIu6Ka<br><hr>";
}
else
{

//Если всё гуд, то регистрируем

mysql_query("
INSERT INTO `names` (`name`)
VALUES ('"
.$login."')
"
);

}
}
}


$query = mysql_query("SELECT * FROM `names` ORDER BY `id` DESC");
echo "<UL TYPE=square>";
while ($users = mysql_fetch_assoc($query))
{
$users['name'] = htmlspecialchars($users['name']);
echo "<li><a href= ?id=".$users['id'].">".$users['name']."</a><br>";
}
echo "</ul>";
?>
<html>
<
head>
<
title>My First Lesson</title>
</
head>

<
body>
<
br>
Search<br />
<
form method="GET" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
<
input type="text" name="search" value="<?php if(isset ($_GET['search'])) { echo addcslashes($_GET['search']);} else {echo "";} ?>"><br />
<
input type="submit" name="search_click" value="search">
</
form>
<
br />

Register<br />
<
form method="POST" action =''>
<
input type=text name="register"><br />
<
input type=submit name="submit" value="Register">
</
form>

Спустя 34 минуты, 30 секунд (6.10.2010 - 09:28) twin написал(а):
А где функция?
stripslashes_array($_GET);

Спустя 5 минут, 25 секунд (6.10.2010 - 09:34) Xpund написал(а):
twin
Не знаю(
А если не сложно, в чём суть этих ковычек?

Спустя 3 минуты, 34 секунды (6.10.2010 - 09:37) Xpund написал(а):
Вот итоговый вариант:
Свернутый текст
<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);

//--Конектимся к базе-//
mysql_connect("localhost","user","pass");
mysql_select_db("db");

/**
* We kill magic inverted commas
* Убиваем магические кавычки
*/

function stripslashesDeep($data)
{
if(is_array($data))
$data = array_map("stripslashesDeep", $data);
else
$data = stripslashes($data);
return $data;
}

if(get_magic_quotes_gpc())
{
$_GET = stripslashesDeep($_GET);
$_POST = stripslashesDeep($_POST);
$_COOKIE = stripslashesDeep($_COOKIE);
$_REQUEST = stripslashesDeep($_REQUEST);
}


if(isset ($_GET['id']))
{
$query = mysql_query("SELECT * FROM `names` WHERE id='".$_GET['id']."'");
$row = mysql_fetch_assoc($query);
$row['name'] = htmlspecialchars($row['name']);
$row['date'] = htmlspecialchars($row['date']);
echo "User <b>".$row['name']."</b> register: ".$row['date']."<hr>";
}


if (isset ($_GET['search_click']))
{
if (isset ($_GET['search']))
{

$search = $_GET['search'];
$search = mysql_real_escape_string($search);


$poisk = "SELECT * FROM `names`
WHERE `name` LIKE '%%"
.addcslashes($search, '%_')."%%'
"
;

$query = mysql_query($poisk) or die (mysql_error());
$row = mysql_num_rows($query);

if ($row)
{
echo "User searching: <font color=blue><b>".$row."</b></font><br>";
while ($searching = mysql_fetch_assoc($query))
{
$searching['name'] = htmlspecialchars($searching['name'], ENT_COMPAT);
echo "".$searching['name']." <br>";
}
}

else
{
echo "Net CoBTTadenui<br>";
}
}
}

if ($_POST['submit'])
{
if (!empty ($_POST['register']))
{
header('Location: http://xpund.ru/index123123.php ');
$login = $_POST['register'];
$login = mysql_real_escape_string($login);

//Проверяем на наличае юзера в базе
$query = "SELECT name
FROM `names`
WHERE `name`='"
.$login."'
"
;
$row = mysql_query($query) or die (mysql_error());
if (mysql_num_rows($row) > 0)
{
echo "Takoi user imeetsya ili proizoLLIJIa OLLIu6Ka<br><hr>";
}
else
{

//Если всё гуд, то регистрируем

mysql_query("
INSERT INTO `names` (`name`)
VALUES ('"
.$login."')
"
);

}
}
}


$query = mysql_query("SELECT * FROM `names` ORDER BY `id` DESC");
echo "<UL TYPE=square>";
while ($users = mysql_fetch_assoc($query))
{
$users['name'] = htmlspecialchars($users['name']);
echo "<li><a href= ?id=".$users['id'].">".$users['name']."</a><br>";
}
echo "</ul>";
?>
<html>
<
head>
<
title>My First Lesson</title>
</
head>

<
body>
<
br>
Search<br />
<
form method="GET" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
<
input type="text" name="search" value="<?php if(isset ($_GET['search'])) { echo addcslashes($_GET['search']);} else {echo "";} ?>"><br />
<
input type="submit" name="search_click" value="search">
</
form>
<
br />

Register<br />
<
form method="POST" action =''>
<
input type=text name="register"><br />
<
input type=submit name="submit" value="Register">
</
form>

Спустя 50 минут, 42 секунды (6.10.2010 - 10:28) twin написал(а):
Магическик кавычки
Функция addslashes_for_array() не работает у тебя.

Спустя 2 минуты, 23 секунды (6.10.2010 - 10:30) Xpund написал(а):
Подправил в предыдущем посте!

Спустя 2 минуты, 43 секунды (6.10.2010 - 10:33) Xpund написал(а):
AddDefaultCharset UTF-8 
php_flag magic_quotes_gpc Off
php_flag magic_quotes_runtime Off
php_flag register_globals Off
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
Options -Indexes

Это у меня в htacces

Спустя 13 минут, 36 секунд (6.10.2010 - 10:47) twin написал(а):
Цитата
Это у меня в htacces

Весь сакроментальный смысл задачи, сделать скрипт, независимый от настроек сервера.

           $query = mysql_query("SELECT * FROM `names` WHERE id='".$_GET['id']."'");

Тут дырка.


Спустя 2 минуты, 4 секунды (6.10.2010 - 10:49) Xpund написал(а):
twin
То есть с кавычками сейчас номарльно?
А на счёт этой строки понятия не имею где дырка(

Спустя 17 минут, 38 секунд (6.10.2010 - 11:06) twin написал(а):
Цитата
А на счёт этой строки понятия не имею где дырка(

Спустя 9 минут, 47 секунд (6.10.2010 - 11:16) Xpund написал(а):
Так надо:

    
$id = isset($_GET['id'])?$_GET['id']:NULL;
$query = mysql_query("SELECT * FROM `names` WHERE `id`=".(int)$id );

Спустя 20 минут, 30 секунд (6.10.2010 - 11:37) twin написал(а):
Ну вот.
А теперь тебя хвалю я, а теперь тебя люблю я (с) smile.gif

Правда echo выше тела html - очень плохо, но в целом с задачей вроде справился.
Респект. user posted image

Свернутый текст
По стилю еще посмотри сдвиги. Хотя дело твое конечно, но со сдвигами красивее смотрится.

Спустя 5 минут, 52 секунды (6.10.2010 - 11:43) Xpund написал(а):
Спасибо. Буду дальше учиться.
Жду ещё задачи)


_____________
минус, конечно, иногда полезен, но плюс мне нравиться больше :)
Женский журнал - Жена сказала раскрутить сайт любой ценой (Sorry)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.