[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проверка на безопасность и необходимость дополнени
G3/SG1
Вот делаю сайт один. Пока он состоит только из статей, названия которых находятся в БД и выводятся с помощью скрипта. Я хотел бы, чтоб вы оценили этот скрипт на предмет безопасности: есть ли какие-то уязвимости, надо ль что-то восполнять в плане безопасности.
Вот он:


PHP
<?php
/*Инициализация БД*/
$dblocation "localhost"// Имя сервера
$dbuser "root";          // Имя пользователя
$dbpasswd "";            // Пароль
$dbconnect = @mysql_connect($dblocation$dbuser$dbpasswd);
if (!
$dbconnect// Если дескриптор равен 0 соединение не установлено
{
  echo 
"Ошибка обращения к MySQL-серверу!";
  exit();
}
  
mysql_select_db('anti');


/*Работа с базой*/
function get_articles(){
echo <<<HERE
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Антикапиталистические Материалы</title>
<script src=status/antikapital.js>
</script>
<link rel="stylesheet" href="styles/style.css" type="text/css">
<link rel="icon" href="favicon/favicon.ico" type="image/x-icon">
</head>

<body background="backgrounds/5281.jpg">

<a href="http://avret.ru" title="На Главную Страницу">
<img src="buttons/button.jpg" width="135" height="864" align="right" border="0" alt="На Главную Страницу" onMouseDown=this.src='buttons/00.jpg' onMouseUp=this.src='buttons/Точечный рисунок.jpg' onMouseOut="show_stat()">
<img src="buttons/button.jpg" width="135" height="864" align="left" border="0" alt="На Главную Страницу" onMouseDown=this.src='buttons/00.jpg' onMouseUp=this.src='buttons/Точечный рисунок.jpg' onMouseOut="show_stat()"></a>
<br><br>

<div class=ocp align=center>

HERE;
  
$rez mysql_query("SELECT count(articleID)FROM articles_religion"); // Здесь мы узнаём сколько всего этих ай ди в соответствующей таблице
$vsego = @mysql_result($rez,0);// Здесь принимаем результат

if(isset($_GET["page"])){
$page=$_GET["page"];//Номер страницы получаем методом гет
}else{
 
$page=1;//Если страница не указана, то это - первая страница
 
}



$kol_on_page=7;                            //Количество ссылок на одной странице.
$ot=$kol_on_page $page-$kol_on_page;
$do=$kol_on_page $page-1;           //Расчитываем от и до
$kol_pages=ceil($vsego/$kol_on_page);//Получаем число страниц. Готово.




    
$sql="SELECT article_name FROM articles_religion ORDER BY articleID asc";
$rez=mysql_query($sql);                // Получаем то, что хотим вывести, в нашем случае это ссылки

# переменная $i отвечает за кол-во выводимых ссылок
# переменная $a ответчает за номер артиклИДа в теле ссылки
$i=-1;
$a=0;                            //Устанавливаем счётчик
while($mas=mysql_fetch_array($rez)) 
{
$i++;                                // После каждого вывода счётчик увеличивается на единицу
$a++;
if(
$i<$ot || $i>$do)continue;//Здесь мы применяем полученные значения от и до
echo "<a href=?articleID=$a>$mas[article_name]</a><br><br><br>";

}

if(
$kol_pages>1)
{                                          
#   Если кол-во страниц получилось больше 1,
for($i=1$i<=$kol_pages$i++){           #   добавляем ссылки на другие страницы.
    
if($i<10){
echo 
"<a href='?page=$i'>$i</a>"." ";
}
else {echo 
"";}
}
}
}



/*выборка статей в зависимости от значения артиклИД*/
$articleID $_GET['articleID'];
 if(!
$a = @isset($_GET['articleID'])?$_GET['articleID']:'0'){
     @
get_articles();              #если артиклИД не назначен, выводим ссылки
     
}else{
$a = @readfile("$a.html");        #если файл с заданным значением артиклИД найден, то читаем его содержимое
if(!$a){
    @
readfile("err404.html");     #если файл с заданным значением артиклИД не найден, возвращаем ошибку 404
    
}
}



Заранее спасибо.



Спустя 26 минут, 26 секунд (23.06.2009 - 20:53) glock18 написал(а):
Единственное что я вижу в плане безопасности - возможность подставить вместо $_GET['page'] дробное или отрицательное число. Но из этого разве что можно только текст ошибки получить, если error_reporting включен.

Зато по коду. Можно к каждой строке через одну придраться.

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

Спустя 15 минут, 33 секунды (23.06.2009 - 21:09) G3/SG1 написал(а):
Хм.. Из сказанного я понял, что в плане безопасности тут беспокоиться особо и не за что )

То, что тут код у меня кривой - я это признаю.. А что можно было б тут привести в более кошерный вид? Пару-тройку примеров.

Спустя 52 минуты, 41 секунда (23.06.2009 - 22:01) glock18 написал(а):
Цитата (G3/SG1 @ 23.06.2009 - 18:09)
Пару-тройку примеров


Без проблем smile.gif

Самое убойное то, КАК ты выводишь только те статьи, которые тебе нужны.
1. собираешь все.
2. выводишь только то, что надо.

это делается гораздо изящнее с использованием LIMIT в sql-запросе.

И целая куча несуразных совершенно вещей, например:

1. применение @ везде, где можно и "нельзя". ее вообще не следует использовать.
2.
PHP
else {echo "";}
- абсолютно бессмысленная ветка.
3. это целый набоооор.

PHP
/*выборка статей в зависимости от значения артиклИД*/
$articleID = $_GET['articleID'];
 if(!$a = @isset($_GET['articleID'])?$_GET['articleID']:'0'){
     @get_articles();              #если артиклИД не назначен, выводим ссылки
     }else{
$a = @readfile("$a.html");        #если файл с заданным значением артиклИД найден, то читаем его содержимое
if(!$a){
    @readfile("err404.html");     #если файл с заданным значением артиклИД не найден, возвращаем ошибку 404
    }
}


по строкам пройдемся
PHP
$articleID = $_GET['articleID'];

1. нет проверки есть ли в GET такой параметр.
2. $articleID не используется больше нигде.

PHP
if(!$a = @isset($_GET['articleID'])?$_GET['articleID']:'0'){

1. зато проверка есть здесь! да еще какая - собачкой. интересно а здесь она зачем? тем более что ошибка то уже вылезла строкой раньше smile.gif
2. присваиваешь этой дикой конструкцией значение переменной $a, которую, конечно же, тоже не используешь дальше.
3. ну мелочь, в общем то - 0 в кавычках. более чем уверен, что в базе id хранится как число, а ты его в кавычки ставишь непонятно зачем. 0 == '0' вернет true, поэтому это работает, но оно не кразиво.

PHP
@get_articles();

на этой строчке, даже стыдно, поругаться не на что. разве что @ снова упомянуть smile.gif

PHP
}else{

и здесь не на что опять... форму теряю к концу фрагмента...

ладно, дальше тоже не буду перечислять. там только @ напрягает.

PS: позволь спросить, ты по Попову занимался? smile.gif
Быстрый ответ:

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