|
|
|
| Всем привет. Нужен Ваш совет. Я делаю проверку наличия страниц через ф-цию in_array() . Если нет совпадений в БД, то подключаю 404 страницу. Так вот мой вопрос: нужно ли в таком случае делать различные проверки типа "волшебных кавычек" и прочее? Проверяю только на существование GET-переменной (isset() ) и проверяю пуста ли она. Заранее спасибо. | |
|
|
|
|
|
|
|
для: ubahuba
(06.06.2014 в 17:37)
| | А можно кусочек кода? А то "проверяю через ф-ию in_array()" и "...нет совпадений в БД" и "... проверки типа волшебные(я так понимаю имеется ввиду magic_quotes) ...", - данные фразы провоцируют очень много вопросов | |
|
|
|
|
|
|
|
для: tvv123456
(06.06.2014 в 19:08)
| |
if (isset ($_GET["sector"]) AND isset ($_GET["genre"]) AND isset ($_GET["year"])) {
$sector = $_GET["sector"];
$genre = $_GET["genre"];
$year = $_GET["year"];
if (!empty ($sector)) {
$sql = "SELECT
subdirection
FROM menu
WHERE subdirection IN ('Док. фильмы', 'Мульт. фильмы', 'Худ. фильмы')";
$result = mysqli_query ($link, $sql);
$i = 0;
while ($row = mysqli_fetch_assoc ($result)) {
$allowed[$i] = $row["subdirection"];
$i++;
}
if (in_array($sector, $allowed)) {
if (!empty ($genre)) {
$sql = "SELECT direction FROM menu WHERE subdirection = '$sector'";
$result = mysqli_query ($link, $sql);
$i = 0;
while ($row = mysqli_fetch_assoc ($result)) {
$allowed[$i] = $row["direction"];
$i++;
}
if (in_array($genre, $allowed)) {
if (!empty ($year)) {
$sql = "SELECT
`year`
FROM film
JOIN year_film ON film.id_film = year_film.id_film
JOIN `year` ON year_film.id_film = year.id_year
JOIN menu_film ON film.id_film = menu_film.id_film
JOIN menu ON menu_film.id_menu = menu.id_menu
WHERE subdirection = '$sector'
AND direction = '$genre'";
$result = mysqli_query ($link, $sql);
$i = 0;
while ($row = mysqli_fetch_assoc ($result)) {
$allowed[$i] = $row["year"];
$i++;
}
if (in_array($year, $allowed)) {
include ("php/parts/letter.php");
include ("php/parts/navigation.php");
$film = "SELECT
film.id_film,
film.meta_keywords,
title,
DATE_FORMAT(added, '%d/%m/%Y') AS `date`,
DATE_FORMAT(added, '%T') AS `time`,
CONCAT(SUBSTRING(description, 1, 286), '...') AS short_description,
duration,
poster,
(`like` - dislike) AS difference,
voter,
viewer,
`year`,
direction,
subdirection,
quality,
dub
FROM film
JOIN menu_film ON film.id_film = menu_film.id_film
JOIN menu ON menu_film.id_menu = menu.id_menu
JOIN year_film ON film.id_film = year_film.id_film
JOIN `year` ON year_film.id_film = year.id_year
JOIN quality_film ON film.id_film = quality_film.id_film
JOIN quality ON quality_film.id_quality = quality.id_quality
JOIN dub_film ON film.id_film = dub_film.id_film
JOIN dub ON dub_film.id_dub = dub.id_dub
WHERE menu.direction = '$genre'
AND menu.subdirection = '$sector'
AND `year` = $year
GROUP BY film.id_film DESC
LIMIT $position, $number_of_pages";
$films = mysqli_query ($link, $film);
while ($row = mysqli_fetch_assoc ($films)) {
echo "<section style=\"background-image: url(images/site/$picture[name])\">
<table cols=\"1\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">
<tr>
<td>
<table cols=\"1\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">
<tr>
<td><h3><a href=\"?sector=$row[subdirection]&genre=$row[direction]&film=$row[title]\" title=\"$row[title] $row[meta_keywords]\">$row[title]</a></h3></td>
</tr>
<tr>
<td><strong>Добавлено: </strong>$row[date]<strong> в </strong>$row[time]</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<div class=\"hr\"></div>
<table cols=\"2\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">
<tr>
<td rowspan=\"9\" valign=\"top\"><img class=\"section\" src=\"images/films/$row[poster]\" title=\"$row[title]\" alt=\"$row[title] $row[meta_keywords]\"></td>
<td valign=\"top\"><strong>Описание: </strong>$row[short_description]</td>
</tr>
<tr>
<td valign=\"top\"><strong>Год выпуска: </strong><a href=\"?sector=$row[subdirection]&genre=$row[direction]&year=$row[year]\" class=\"set\">$row[year]</a></td>
</tr>
<tr>
<td valign=\"top\"><strong>Страна: </strong>";
$country = "SELECT country
FROM film
JOIN country_film
ON film.id_film = country_film.id_film
JOIN country
ON country_film.id_country = country.id_country
WHERE country_film.id_film = $row[id_film]";
$countries = mysqli_query ($link, $country);
$i = 1;
while ($country = mysqli_fetch_assoc ($countries)) {
echo "<a href=\"?sector=$row[subdirection]&genre=$row[direction]&country=$country[country]\" class=\"set\">$country[country]</a>";
if ($i < mysqli_num_rows ($countries)) {
echo ", ";
$i++;
}
}
echo "</td>
</tr>
<tr>
<td valign=\"top\"><strong>Направление: </strong>";
$direction = "SELECT direction, subdirection
FROM film
JOIN menu_film
ON film.id_film = menu_film.id_film
JOIN menu
ON menu_film.id_menu = menu.id_menu
WHERE menu_film.id_film = $row[id_film]";
$directions = mysqli_query ($link, $direction);
$i = 1;
while ($direction = mysqli_fetch_assoc ($directions)) {
echo "<a href=\"?sector=$direction[subdirection]&genre=$direction[direction]\" class=\"set\">$direction[direction]</a>";
if ($i < mysqli_num_rows ($directions)) {
echo ", ";
$i++;
}
}
echo "</td>
</tr>
<tr>
<td valign=\"top\"><strong>Продолжительность: </strong>$row[duration]</td>
</tr>
<tr>
<td valign=\"top\"><strong>Озвучивание: </strong>$row[dub]</td>
</tr>
<tr>
<td valign=\"top\"><strong>Качество: </strong>$row[quality]</td>
</tr>
<tr>
<td valign=\"top\"><strong>Режиссер: </strong>";
$director = "SELECT famous.name AS director
FROM film
JOIN famous_film
ON film.id_film = famous_film.id_film
JOIN famous
ON famous_film.id_famous = famous.id_famous
WHERE famous_film.id_film = $row[id_film] AND status = 'director'";
$directors = mysqli_query ($link, $director);
$i = 1;
while ($director = mysqli_fetch_assoc ($directors)) {
echo "<a href=\"?director=$director[director]\" class=\"set\">$director[director]</a>";
if ($i < mysqli_num_rows ($directors)) {
echo ", ";
$i++;
}
}
echo "</td>
</tr>
<tr>
<td valign=\"top\"><strong>В ролях: </strong>";
$actor = "SELECT famous.name AS actor
FROM film
JOIN famous_film
ON film.id_film = famous_film.id_film
JOIN famous
ON famous_film.id_famous = famous.id_famous
WHERE famous_film.id_film = $row[id_film] AND status = 'actor'";
$actors = mysqli_query ($link, $actor);
$i = 1;
while ($actor = mysqli_fetch_assoc ($actors)) {
echo "<a href=\"?actor=$actor[actor]\" class=\"set\">$actor[actor]</a>";
if ($i < mysqli_num_rows ($actors)) {
echo ", ";
$i++;
}
}
echo "</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<div class=\"hr\"></div>
<table cols=\"3\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">
<tr align=\"center\">
<td><a class=\"vote\" href=\"#\"><img class=\"vote\" src=\"images/site/vote/like.png\"></a>$row[difference]<a class=\"vote\" href=\"#\"><img class=\"vote\" src=\"images/site/vote/dislike.png\"></a></td>
<td><strong>Проголосовало: </strong>$row[voter]</td>
<td><strong>Просмотрело: </strong>$row[viewer]</td>
</tr>
</table>
</td>
</tr>
</table>
</section>";
}
include ("php/parts/navigation.php");
}
else {
include ("php/parts/errors/404.php");
}
}
else {
include ("php/parts/errors/404.php");
}
}
else {
include ("php/parts/errors/404.php");
}
}
else {
include ("php/parts/errors/404.php");
}
}
else {
include ("php/parts/errors/404.php");
}
}
else {
include ("php/parts/errors/404.php");
}
}
|
| |
|
|
|
|
|
|
|
для: ubahuba
(06.06.2014 в 19:11)
| | Подсвечивайте пожалуйста код тегом <? перед началом кода
mysqli Не пользовал, но что касается запросов к базе, то магические кавычки лучше отключать
, а запросы к базе обрабатывать таким образом: если тип переменной участвующей в запросе целое число, то указывать это явно, например, “SELECT ….WHERE id=”.(int)$id, а если это строка, то примерно так: “SELECT …. WHERE str=’”.mysql_real_escape_string($str).”’”; Но так как вы используете mysqli, то насколько я знаю, все запросы и так обрабатываются, то главное чтобы php не наставил лишних бэкслешей | |
|
|
|
|
|
|
|
для: tvv123456
(06.06.2014 в 19:36)
| | Так все-таки делать проверку? А что запрос проверяется на соответствие в in_array это не имеет значения вовсе? | |
|
|
|
|
|
|
|
для: ubahuba
(06.06.2014 в 20:34)
| | экранизация внешних данных имеет быть при вставки ее в запросы к мусклу
ну и при вставке в тело во избежании xss атак | |
|
|
|
|
|
|
|
для: moonfox
(06.06.2014 в 20:39)
| | Спасибо. А какими вы пользуетесь ф-циями для защиты? | |
|
|
|
|
|
|
|
для: ubahuba
(06.06.2014 в 20:40)
| | вообще внешние данные пост гет лучше обрабатывать если производите значимые манипуляции с ними
http://ua2.php.net/manual/en/mysqli.real-escape-string.php
http://ua2.php.net/manual/ru/function.htmlspecialchars.php
http://ru.wikipedia.org/wiki/Cross-Site_Scripting
сейчас придет confirm он вам лучше растолкует) | |
|
|
|
|
|
|
|
для: ubahuba
(06.06.2014 в 20:34)
| | > А что запрос проверяется на соответствие в in_array это не имеет значения вовсе?
честно тяжело так просматривать чужой код, да еще без подсветки.
Но опять же насколько я понял вы берете эти шаблоны из БД. Для меня это просто бессмысленное расходование ресурса БД
Я никогда не проверял запрос на соответствие каким-либо шаблонам. SQL-инъекция самый плохой вариант, что может быть при обращении к БД, но если вы корректно обрабатываете данные поступившие от юзверя, то данная опасность вам не грозит. | |
|
|
|
|
|
|
|
для: tvv123456
(06.06.2014 в 22:29)
| | А как Вы предлагаете проверять есть ли данная страница на сайте в таком случае? | |
|
|
|
|
|
|
|
для: ubahuba
(06.06.2014 в 22:40)
| | у вас ссылки ввида host.ru/about ?
маску вы в БД храните.
значит при обращение к хосту под ссылкой типа /hjkhjkhgkjgjktgiy6767657
вы ищите сей урл в базе, чтоб выбрать параметры, не нашли - выдали 404 | |
|
|
|