GET защита

vasilev5

Registered
Имам тази заявка
<?php
if(isset($_GET['d'])&&isset($_GET['c'])&&isset($_GET['p']))
include($_GET['d']."/".$_GET['c']."/".$_GET['p'].".php");
elseif(isset($_GET['p']))
include($_GET['p'].".php");
else
include("new.php");
?>
Как мога да я защитя от хакерски атаки
 
Първата стъпка е да си зададеш няколко въпроса: от какво трябва да се предпазя, къде може да има проблем. В твоя случай имаш include. include() отваря някакъв файл и го слага в твоя. Въпросният файл се посочва от юзера и идва чрез $_GET. Значи мога да кажа, че искам да отвори например "../folder/passwords.txt". От това и трябва да се предпазиш. Решението е елементарно - просто правиш проверка дали разрешаваш да се отвори исканият файл:

PHP:
$file_with_path = $_GET['d'].'/'.$_GET['c'].'/'.$_GET['p'].'.php';

$allowed_files = ['path/to/file.php', 'another/paht/file.php', /*масив с разрешените файлове*/];

if (!in_array($file_with_path, $allowed_files)) {
die ('Нямаш разрешение да отвориш този файл!');
}
else
include $file_with_path;;

А най-добре ще е изобщо да не иклудваш по този начин - просто в урл-то да си пише името на файла и той да си се отваря директно.
 
vasilev5 каза:
Това къде да го сложа в кода
Ти майтапиш ли се?
Е че там където имаш include $GET..$GET.$GET; Нали питаш как да се защитиш? Това ти е проверката дали е разрешено инклудването на дадения файл?
65755741711579875574171157101755741711573275574171157116755741711571057557417115732755741711571097557417115797755741711571087557417115711175574171157117755741711571097557417115710175574171157110755741711573275574171157108755741711571057557417115732755741711571157557417115710575574171157637557417115
 
Извинявай, но не съм вътре в рпр, но поддържам сайта на училище
Дава ми сега грешка н реда:
Parse error: syntax error, unexpected '[' in /home/pgsagvar/public_html/index1.php on line 115
 
vasilev5 каза:
Извинявай, но не съм вътре в рпр, но поддържам сайта на училище
Дава ми сега грешка н реда:
Parse error: syntax error, unexpected '[' in /home/pgsagvar/public_html/index1.php on line 115
Грешката идва оттам, че ползваш по-стара версия на php. Няма проблем, просто ще ползваш другия начин за създаване на масив. (новият е с [], предишният е с array())
Ок, ще обясня по-подробно:
1. Първо създавам масив с разрешените за инклудване файлове:

PHP:
$allowed_files = array (
'path/to/file1.php',
'path/to/file2.php',
/*тук можеш да си добавяш колкото си искаш елементи*/
);

На мястото на path/to/file2.php въвеждаш директорията и името на файл, разрешен за инклудване. Пътят до файла трябва да е спрямо директорията, в която се намираш.

2. Втора стъпка е да сложиш в една променлива искания от юзера файл. Това е лесно:
PHP:
$wanted_file = $_GET['d'].'/'.$_GET['c'].'/'.$_GET['p'].'.php';
Просто свързваш подадените елементи.

3. Проверяваш дали $wanted_file се намира в списъка с разрешени файлове. Ако го няма там, значи не е разрешен и exit-ваме със съобщение за грешка. Ако го има, можем спокойно да го инклуднем:

PHP:
if (!in_array($wanted_file , $allowed_files)) {
    die ('Нямаш разрешение да отвориш този файл!');
}
else {
    include $wanted_file;
}

Това са нещата стъпка по стъпка. Опитай се да го разбереш, а не да го copy-paste-неш. Разликата е като между това да научиш един урок добре и да го назубриш преди тест.
 
Долу горе го проумях и нямам проблеми, но не мога да го направя когато няма рнр да ми излиза new. Тоест да ми се изпълни от стария файл
else
include("new.php");
 
vasilev5 каза:
Долу горе го проумях и нямам проблеми, но не мога да го направя когато няма рнр да ми излиза new. Тоест да ми се изпълни от стария файл
else
include("new.php");
Просто на мястото на die() слагаш
Код:
include 'new.php'; exit;
 
Сега ми дава грешки в другите страници- в менюто
arse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /home/html/za u4e1.php on line 52
52- <a href="http://vasil.com/ednevnik/index.php" target="_blank">дневник</a>
 
vasilev5 каза:
Сега ми дава грешки в другите страници- в менюто
arse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /home/html/za u4e1.php on line 52
52- <a href="http://vasil.com/ednevnik/index.php" target="_blank">дневник</a>
Дай си php кода!
Вероятно си пирел дословно думите на анонимен и си сложил нещата така :
Код:
	include 'new.php'; exit;
а те трябва да са на отделни редове така:
Код:
include 'new.php'; 
exit;
 
<?php include("m.php"); if(isset($_SESSION['username'])){ $ses=$_SESSION['username'];echo "(<a href=\"?d=dir&c=login&p=viewprofile&user=$ses\";} ?>
<a href="http://vasilev50.com/ednevnik/index.php" target="_blank">Äíåâíèê</a>;
<A href="?d=dir&c=aktual&p=aktual-u4iteli"></a><br>
<A href="?d=dir&c=aktual&p=sedmi4no">Ñåäìè÷íî ðàçïèñàíèå<br>
</a><a href="dir/aktual/PDU2014.pdf" target="_blank">Ïðàâèëíèê íà
ó÷èëèùåòî</a> <A href="?d=dir&c=aktual&p=aktual-u4iteli"><br>
Ó÷èòåëè </a><BR>
<A href="?d=dir&c=aktual&p=aktual-us">Ó÷åíè÷åñêè ñúâåò </A><BR>
<a href="?d=dir&c=aktual&p=graf">Ðåäîâíî îáó÷åíèå</a><br>
<A href="?d=dir&c=aktual&p=aktual-sfo">Ñàìîñòîÿòåëíà ôîðìà <BR>
íà îáó÷åíèå </A><BR>
<a href="?d=dir&c=aktual&p=aktual-maturi">Ìàòóðà 2015</a><a href="?d=dir&c=aktual&p=graf"></a><a href="?d=dir&c=di&p=grafik-DI"><br>
Äúðæàâíè èçïèòè<br>
</A><a href="?d=dir&c=uspech&p=uspech">Ïðîåêò "Óñïåõ"</a><br>
<a href="?d=dir&c=aktual&p=svob" >Ñâîáîäíè ìåñòà</a> <br>
</ul>
</div>
</div>
<div id="content">
<h1 class="title"> </h1>

<p>
<?php
$allowed_files = array (
'path/to/new.php',
'path/to/proekt.php',
'path/to/za nas.php',
'path/to/priem.php',
'path/to/gallery.php',
'path/to/gallery-schols.php',
'path/to/gallery-2014.php',
'path/to/gallery-2013.php',
'path/to/gallery-2012.php',
'path/to/gallery-2011.php',
'path/to/gallery-2010.php',
'path/to/gallery-2009.php',
'path/to/gallery-2008.php',
'path/to/bbcode1.php',
'path/to/admmod.php',
'path/to/m.php',
'path/to/adm.php',
'path/to/za u4e1.php',
'dir/aktual/sedmi4no.php',
'dir/aktual/aktual-sfo.php',
'dir/aktual/sedmi4no.php',
'dir/aktual/aktual-u4iteli.php',
'dir/aktual/aktual-us.php',
'dir/aktual/graf.php',
'dir/aktual/aktual-maturi.php',
'dir/aktual/grafik-DI.php',
'dir/aktual/svob.php',
'dir/uspech/uspech.php',
'dir/aktual/sedmi4no.php',

/*òóê ìîæåø äà ñè äîáàâÿø êîëêîòî ñè èñêàø åëåìåíòè*/
);
$file_with_path = $_GET['d'].'/'.$_GET['c'].'/'.$_GET['p'].'.php';
if (!in_array($wanted_file , $allowed_files)) {
die( include 'page2.php');
exit;

}


?>
 
PHP:
<?php 
include("m.php"); 
if(isset($_SESSION['username'])){ 
	$ses = $_SESSION['username'];
	echo '<a href="?d=dir&c=login&p=viewprofile&user='.$ses.'"';
} 
?>
<a href="http://vasilev50.com/ednevnik/index.php" target="_blank">Äíåâíèê</a>;
<A href="?d=dir&c=aktual&p=aktual-u4iteli"></a><br>
<A href="?d=dir&c=aktual&p=sedmi4no">Ñåäìè÷íî ðàçïèñàíèå<br>
</a><a href="dir/aktual/PDU2014.pdf" target="_blank">Ïðàâèëíèê íà
ó÷èëèùåòî</a> <A href="?d=dir&c=aktual&p=aktual-u4iteli"><br>
Ó÷èòåëè </a><BR>
<A href="?d=dir&c=aktual&p=aktual-us">Ó÷åíè÷åñêè ñúâåò </A><BR>
<a href="?d=dir&c=aktual&p=graf">Ðåäîâíî îáó÷åíèå</a><br>
<A href="?d=dir&c=aktual&p=aktual-sfo">Ñàìîñòîÿòåëíà ôîðìà <BR>
íà îáó÷åíèå </A><BR>
<a href="?d=dir&c=aktual&p=aktual-maturi">Ìàòóðà 2015</a><a href="?d=dir&c=aktual&p=graf"></a><a href="?d=dir&c=di&p=grafik-DI"><br>
Äúðæàâíè èçïèòè<br>
</A><a href="?d=dir&c=uspech&p=uspech">Ïðîåêò "Óñïåõ"</a><br>
<a href="?d=dir&c=aktual&p=svob" >Ñâîáîäíè ìåñòà</a> <br>
</ul>
</div>
</div>
<div id="content">
<h1 class="title"> </h1>

<p>
<?php
$allowed_files = array (
'path/to/new.php',
'path/to/proekt.php',
'path/to/za nas.php',
'path/to/priem.php',
'path/to/gallery.php',
'path/to/gallery-schols.php',
'path/to/gallery-2014.php',
'path/to/gallery-2013.php',
'path/to/gallery-2012.php',
'path/to/gallery-2011.php',
'path/to/gallery-2010.php',
'path/to/gallery-2009.php',
'path/to/gallery-2008.php',
'path/to/bbcode1.php',
'path/to/admmod.php',
'path/to/m.php',
'path/to/adm.php',
'path/to/za u4e1.php',
'dir/aktual/sedmi4no.php',
'dir/aktual/aktual-sfo.php',
'dir/aktual/sedmi4no.php',
'dir/aktual/aktual-u4iteli.php',
'dir/aktual/aktual-us.php',
'dir/aktual/graf.php',
'dir/aktual/aktual-maturi.php',
'dir/aktual/grafik-DI.php',
'dir/aktual/svob.php',
'dir/uspech/uspech.php',
'dir/aktual/sedmi4no.php',

/*òóê ìîæåø äà ñè äîáàâÿø êîëêîòî ñè èñêàø åëåìåíòè*/
);
$file_with_path = $_GET['d'].'/'.$_GET['c'].'/'.$_GET['p'].'.php';
if (!in_array($wanted_file , $allowed_files)) {
die( include 'page2.php');
exit;

}
 
Сега линковете на страницата не работят, макар че съм ги задал
'dir/aktual/sedmi4no.php',
'dir/aktual/aktual-sfo.php',
'dir/aktual/sedmi4no.php',
'dir/aktual/aktual-u4iteli.php',
'dir/aktual/aktual-us.php',
'dir/aktual/graf.php',
'dir/aktual/aktual-maturi.php',
'dir/aktual/grafik-DI.php',
'dir/aktual/svob.php',
'dir/uspech/uspech.php',
'dir/aktual/sedmi4no.php',
 
Като гледам даката е пропуснал последния ред:

PHP:
include $wanted_file;
Всъщност и това не е вярно. Трябва да имаш или навсякъде $wanted_file, или навсякъде $file_with_path. На едно място ползваш едното, на друго - другото. Избери едно от двете имена и ползвай него.
 
навсякъде го направих $wanted_file и се получи - работи
Няма ли по лесен начин с този GET имам да коригирам една камара файлове
 
Сега се получи проблем с дизайна - не ми излизат елементите след еxit
?>

<div id="content">
<h1 class="title"></h1>

<div id="content">
<?php
$allowed_files = array (
'path/to/new.php',
'path/to/proekt.php',
'path/to/za nas.php',
'path/to/priem.php',
'path/to/gallery.php',
'path/to/gallery-schols.php',
'path/to/gallery-2014.php',
'path/to/gallery-2013.php',
'path/to/gallery-2012.php',
'path/to/gallery-2011.php',
'path/to/gallery-2010.php',
'path/to/gallery-2009.php',
'path/to/gallery-2008.php',
'path/to/bbcode1.php',
'path/to/admmod.php',
'path/to/m.php',
'path/to/adm.php',
'path/to/za u4e.php',
'dir/proekt/sega.php',
'dir/proekt/proekt-viktori.php',
'dir/proekt/proekt-stateg.php',
'dir/proekt/proekt-real.php',

/*òóê ìîæåø äà ñè äîáàâÿø êîëêîòî ñè èñêàø åëåìåíòè*/
);
$wanted_file = $_GET['d'].'/'.$_GET['c'].'/'.$_GET['p'].'.php';
if (!in_array($wanted_file , $allowed_files)) {

die(include 'dir/proekt/sega.php');
}
else {
include $wanted_file;
}

?>

</div>

</div>

<div id="right_column">
<div class="holder">
<h2 class="title">Ñíèìêè</h2>


<IMG SRC="images/demo/p5.jpeg" alt="" width="100" height="100" /> <IMG SRC="images/demo/p6.jpeg" alt="" width="100" height="100" />
<IMG SRC="images/demo/p7.jpeg" alt="" width="100" height="100" /> <IMG SRC="images/demo/p8.jpeg" alt="" width="100" height="100" />
<IMG SRC="images/demo/g1.JPG" alt="" width="100" height="100" /> <IMG SRC="images/demo/g5.JPG" alt="" width="100" height="100" />
<IMG SRC="images/demo/g3.JPG" alt="" width="100" height="100" /> <IMG SRC="images/demo/g4.JPG" alt="" width="100" height="100" />
</div>
<div class="holder"> <a href="#tabs-1"><IMG SRC="images/demo/p1.jpeg" alt="" width="100" height="100" /></a> <a href="#tabs-2"><IMG SRC="images/demo/p2.jpeg" alt="" width="100" height="100" /> </a> </div>
<div class="holder"> <a href="#tabs-3"><IMG SRC="images/demo/p3.jpeg" alt="" width="100" height="100" /> </a> <a href="#tabs-1"><IMG SRC="images/demo/p4.jpeg" alt="" width="100" height="100" /> </a></div>
</div>
</div>
</div>



<div class="wrapper row4">
<div id="footer" class="clear">
<div class="footbox">
<h2>Áúðçà âðúçêà</h2>
<ul>
<li class="active"><a href="index.php">Íà÷àëî</a></li>
<li><a href="za nas.php">Çà íàñ</a></li>
<li><a href="za u4e.php">Çà ó÷åíèöè è ðîäèòåëè</a></li>
<li><a href="priem.php">Ïðèåì</a></li>
<li></li>
</ul>
<p> </p>
<p> </p>
<p> </p>
</div>
<div class="footbox">
</div>
<div class="fl_right">
<div id="social">
<h2>Êîíòàêòè</h2>
<ul>
<li>Âàðíà<br />
Ïðîôåñèîíàëíà ãèìíàçèÿ ïî ñòðîèòåëñòâî, àðõèòåêòóðà è ãåîäåçèÿ<br />
áóë. "Ñëèâíèöà" ¹ 189<br />
<br />
òåë: 052745-933, 052756-756<br />
Email: tcc_varna@yahoo.com</li>
</ul>
</div>
<div id="newsletter" class="clear">
<form action="#" method="post">
<fieldset> <legend></legend></fieldset>
</form>
</div>
</div>
</div>
</div>

<div class="wrapper">
<div id="copyright" class="clear">
<p class="fl_left">Copyright © 2011 - All Rights Reserved </p>
<p class="fl_right"> </p>
</div>
</div>
</body>
</html>
 
Просто премахни exit. Колегата ти го е дал да го следваш като пример и логика но всъщност май при теб е излишен. Тоест като цяло е достааа оплескана логиката ти но да кажел, че колегата доста такаа галантно ти драсна просто улеснено решение на проблема, но и на него му е ясно, че има къде къде по-добри варянти. Просто премахни exit защото той спира изпълнението на кода след него особено ако е поставен в логически проверки.
 
Дори и да махна exit; картинките не се появяват. Прави ми впечатление, че когато натискам линковете, те се появяват и кода работи нормално
 

Back
Горе