<?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 Кстати можно использовать и 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:
Может лучше так?
А если мой ник: <phz>, то тогда в базе будет искать: <phz> И также записано? А это str_replace тут зачем? Чёт я не понимаю этих двойных презервативов.
$login = mysql_real_escape_string(htmlspecialchars(trim(str_replace($login))));
Может лучше так?
$login = mysql_real_escape_string($login);
А если мой ник: <phz>, то тогда в базе будет искать: <phz> И также записано? А это str_replace тут зачем? Чёт я не понимаю этих двойных презервативов.
Спустя 1 час, 39 минут, 31 секунда (4.10.2010 - 21:37) twin написал(а):
Приведи код в порядок. В такой каше разбираться - глаза поломаешь.
Вот тут почитай про стиль.
Чет тест не работает. На любое поползновение выдает это:
Вот тут почитай про стиль.
Чет тест не работает. На любое поползновение выдает это:
Цитата |
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 написал(а):
Ну вот, теперь куда как приятнее читать.
Цитата |
А лучше так ИЛи |
Оба варианта фтопку. Поройся в решениях, там все есть, и про 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 использовать при выводе в браузер
везде 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.
Вот смотрите:
<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 и посмотрите что туда попадает.
Ищите, может у вас в другом месте, происходит вывод в поток.
И еще, откройте в браузере исходный код страницы, найдите место где у вы XSS и посмотрите что туда попадает.
Спустя 2 минуты, 4 секунды (5.10.2010 - 10:24) Xpund написал(а):
Во втором посте. Оба хсс работают.
Спустя 3 минуты, 4 секунды (5.10.2010 - 10:27) ApuktaChehov написал(а):
Я смотрел по вашей ссылке.
У вас, при выводе списка юзеров, все хорошо, а при нажатии на имя, происходит XSS.
У вас, при выводе списка юзеров, все хорошо, а при нажатии на имя, происходит XSS.
Спустя 5 минут, 16 секунд (5.10.2010 - 10:33) Xpund написал(а):
Вот это я не знаю как исправить
http://xpund.ru/index123123.php/%22%3E%3Cs...29%3C/script%3E
http://xpund.ru/index123123.php?id=-50+uni...8%29,user%28%29
http://xpund.ru/index123123.php/%22%3E%3Cs...29%3C/script%3E
http://xpund.ru/index123123.php?id=-50+uni...8%29,user%28%29
Спустя 6 минут, 3 секунды (5.10.2010 - 10:39) ApuktaChehov написал(а):
Весь скрипт еще раз скиньте.
Я так понял, у вас из GET массива данные прямо в поток выводятся.
Я так понял, у вас из 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']); ?>">
сделайте так:
<form method="GET" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
Спустя 2 минуты, 11 секунд (5.10.2010 - 11:03) Xpund написал(а):
Спустя 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
Так и получается, если в вашу форму подставить:
<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 написал(а):
У... А это все вот почему:
Смотрите внимательно:
На языке SQL это все выглядит так:
Смотрите внимательно у вас, в этом случае, 4 не обрамлена кавычками. А следовательно, учитывая специфику SQL, эта 4 не является строкой.
Далее в место этого числа, можно подставить все что угодно и, с точки зрения SQL, - это будут обычные команды, такие как -50+union+select+1,version(),user();
Вот что получилось:
Избавиться от этого ООООЧень просто, нужно тупо, в запрос, добавить кавычки, вот так:
Теперь на языке SQL все выглядит вот так:
'-50+union+select+1,version(),user()' - является обычно строкой, а не набором команд.
Вот и все
Смотрите внимательно:
$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()' - является обычно строкой, а не набором команд.
Вот и все
Спустя 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 используються только цифровые значения.
В поле 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']))
это можно заменить на
if (!empty ($_POST['register']))
Спустя 6 минут, 57 секунд (5.10.2010 - 11:45) ApuktaChehov написал(а):
Это не нужано:
$_GET['id'] = htmlspecialchars($_GET['id']);
А вот $row['date'] не обрабатывается htmlspecialchars.
Это все что значит?
Достаточно:
$_POST['submit'] - нужно проверять ее существование с помощью isset()
Как вы это себе логически представляете?
Сначала вы содержимое $_POST['register'] передаете в $login, а после чего, обрабатываете $_POST['register']. Думаете в $login данные будут обработанными?
Вот этого достаточно:
В конце, $users['id'] так же не обрабатывается htmlspecialchars.
Сейчас времени нет, вникать. По этому я бегло пробежал по коду.
$_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'] щас поставлю на обработку!
В первом посте поправил.
и $row['date'] щас поставлю на обработку!
В первом посте поправил.
Спустя 25 минут, 44 секунды (5.10.2010 - 12:13) twin написал(а):
Код не правь в первом посте, выкладывай новый. Не удобно прыгать по всему топику.
Пока увидел:
1. XSS в полный рост.
2. Символы % и _ ищутся некорректно.
Пока увидел:
1. XSS в полный рост.
2. Символы % и _ ищутся некорректно.
Спустя 4 часа, 30 минут, 52 секунды (5.10.2010 - 16:43) Xpund написал(а):
twin
По поводу % я поищю как поправить, а на счёт хсс, понятия не имею(
По поводу % я поищю как поправить, а на счёт хсс, понятия не имею(
Спустя 24 минуты, 43 секунды (5.10.2010 - 17:08) twin написал(а):
А вот засунь в поле поиска это
Это самя легкая форма XSS
"><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 написал(а):
По стилю - огромнейший прогресс. Теперь приятно читать.
А по функционалу пока не очень. Мне кажется ты даже не запускал. При первом запуске нотис - неопределен элемент массива
Дальше, хотел зарегаться, хидер ругается. Он прав - выше него echo стоит.
Соответственно никакого редиректа. После него, кстати, нужно ставить exit()
Еще нотис -
Магические кавычки проигнорировал.
XSS тоже до сих пор цветет и пахнет.
Но ты на правильном пути. Уже очень на много лучше, чем первый вариант.
Не здавайся, добей её до конца. Потом тебе сам черт нестрашен будет.
А по функционалу пока не очень. Мне кажется ты даже не запускал. При первом запуске нотис - неопределен элемент массива
<input type="text" name="search" value="<?php echo $_GET['search']; ?>"><br />
Дальше, хотел зарегаться, хидер ругается. Он прав - выше него echo стоит.
Соответственно никакого редиректа. После него, кстати, нужно ставить exit()
Еще нотис -
if($_GET['id'])опять наглое обращение.
Магические кавычки проигнорировал.
XSS тоже до сих пор цветет и пахнет.
Но ты на правильном пути. Уже очень на много лучше, чем первый вариант.
Не здавайся, добей её до конца. Потом тебе сам черт нестрашен будет.
Спустя 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() не работает у тебя.
Функция 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 написал(а):
Ну вот.
А теперь тебя хвалю я, а теперь тебя люблю я (с)
Правда echo выше тела html - очень плохо, но в целом с задачей вроде справился.
Респект.
А теперь тебя хвалю я, а теперь тебя люблю я (с)
Правда echo выше тела html - очень плохо, но в целом с задачей вроде справился.
Респект.
Свернутый текст
По стилю еще посмотри сдвиги. Хотя дело твое конечно, но со сдвигами красивее смотрится.
Спустя 5 минут, 52 секунды (6.10.2010 - 11:43) Xpund написал(а):
Спасибо. Буду дальше учиться.
Жду ещё задачи)
Жду ещё задачи)
_____________
минус, конечно, иногда полезен, но плюс мне нравиться больше :)
Женский журнал - Жена сказала раскрутить сайт любой ценой (Sorry)