PDA

View Full Version : حرفه ای: بخش خبری



darkface
سه شنبه 03 بهمن 1391, 11:12 صبح
سلام دوستان خوبین؟
یه مدته یه فکری خیلی منو درگیر کرده هر چی هم فکر میکنم به جوابی نمیرسم.
ببینید من یه سیستم مثلا دارم که ادمین میاد یه عنوان و یه متن براش میزاره بعدشم توی صفحه اصلی هم که سلکت میکنم.
حالا من توی یه سایتی میخوام این کارو کنم.مثلا یه تگ بزارم اطلاعیه ها بعد به جای بیام عنوان را لود کنم و متنم زیرش فقط میخوام عنوان را درج کنم و وقتی روش کلیک میکنن برن توی یه صفحه دیگه با تمپلیت دیفالت که براش تعریف میشه کل خبر را ببین.
کسی میدونه چطوری هست این قضیه؟

Reza1607
سه شنبه 03 بهمن 1391, 11:50 صبح
شما زماني كه داريد اخبار رو ليست مي كنيد به اين صورت عمل كنيد


//فرض رو بر اين مي گيريم كه شما قبلا به ديتابيس وصل شدين و كوئري رو هم اجرا كردين
while($row=mysql_fetch_assoc($result)){
echo "<a href='news.php?id=$row[id]'>$row[subject]</a>";
}



خوب با تكه كد بالا شما عنوان هر خبر رو به لينكي تبديل كردين كه شماره هر خبر رو به يك فايل به اسم news.php ارسال مي كنه
حالا كافيه تو فايل news.php اون شماره رو با دستور زير بگيريد و با يك كوئري ساده متن كامل رو از ديتابيس بخونيد


$id=$_GET['id']

darkface
سه شنبه 03 بهمن 1391, 11:58 صبح
شما زماني كه داريد اخبار رو ليست مي كنيد به اين صورت عمل كنيد


//فرض رو بر اين مي گيريم كه شما قبلا به ديتابيس وصل شدين و كوئري رو هم اجرا كردين
while($row=mysql_fetch_assoc($result)){
echo "<a href='news.php?id=$row[id]'>$row[subject]</a>";
}



خوب با تكه كد بالا شما عنوان هر خبر رو به لينكي تبديل كردين كه شماره هر خبر رو به يك فايل به اسم news.php ارسال مي كنه
حالا كافيه تو فايل news.php اون شماره رو با دستور زير بگيريد و با يك كوئري ساده متن كامل رو از ديتابيس بخونيد


$id=$_GET['id']

خوب من چون قبلا هک هم کار کردم.به نظرت اگر طرف بیاد به ایدی ما مقدار دلخواهش بده امنیتش نمیاد پایین؟

siavashsay
سه شنبه 03 بهمن 1391, 11:59 صبح
دوست عزیز !
این دیگه درگیری نداره نداره !
شما باید توی دیتابیس یک فیلد درست کنی به نام NewsID بعد هر خبری رو که توی قسمت ادمین نوشتی یک آیدی منحصر به فرد هم برای اون خبر درست کنی و همراه با خبر - عنوان خبر - عکس و ... NewsID رو هم توی دیتابیس درج کنی !
بعد موقعی که توی صفحه اصلی سلکت میکنی مثلا :

$sql=mysql_query("SELECT `news_title`,`news_id` FROM `news`);
while($obj=mysql_fetch_object($sql)){
$news_title=$obj->news_title;
$news_text=$obj->new_text;
$news_id=$obj->news_id;
?>
<a href="read_news.php?id=<?php echo $news_id;?>"><?php echo $news_title;?></a> <br/>
<?php
}
?>
در این کد شما اومدی توی صفحه اصلی فقط عناوین خبر رو گرفتی و یک لینک درست کردی که عنوان اون همون عنوان خبرت هست و لینک به صفحه read_news.php میره و با آیدی همون خبر !
مثلا لینک اون صفحه میشه :

http://www.yoursite.com/read_news.php?id=asd123456
حالا میای توی صفحه read_news.php این کد رو مینویسی :


$news_id=$_GET['id'];
$sql=mysql_query("SELECT * FROM `news` WHERE `news_id`='$news_id'");
$obj=mysql_fetch_object($sql);
$news_title=$obj->news_title;
$news_text=$obj->news_text;
//.. and more
echo $news_title."<br/>";
echo $news_text;
در این کد هم شما اول اومدی آیدی خبر رو که توی لینک با متغیر GET هست رو میگیری بعد خبر مربوط به اون آیدی رو از دیتابیس میگیرید و در نهایت اون رو چاپ میکنید !
امیدوارم منظورتون همین بوده باشه !
موفق باشید !

Reza1607
سه شنبه 03 بهمن 1391, 12:06 عصر
خوب من چون قبلا هک هم کار کردم.به نظرت اگر طرف بیاد به ایدی ما مقدار دلخواهش بده امنیتش نمیاد پایین؟

الان تمام سايت ها دارن از اين روش استفاده مي كنند نمونه اش همين برنامه نويس خودمون
در مورد امنيتش هم شما بايد به عنوان برنامه نويس ورودي ها رو چك كنيد.
و اگر يه نفر اومد و شماره دلخواه خودش رو گذاشت بازم فرقي نمي كنه نهايتش اينه كه شما پيغام مي دين كه همچين خبري پيدا نشد

darkface
سه شنبه 03 بهمن 1391, 12:14 عصر
دوست عزیز !
این دیگه درگیری نداره نداره !
شما باید توی دیتابیس یک فیلد درست کنی به نام NewsID بعد هر خبری رو که توی قسمت ادمین نوشتی یک آیدی منحصر به فرد هم برای اون خبر درست کنی و همراه با خبر - عنوان خبر - عکس و ... NewsID رو هم توی دیتابیس درج کنی !
بعد موقعی که توی صفحه اصلی سلکت میکنی مثلا :

$sql=mysql_query("SELECT `news_title`,`news_id` FROM `news`);
while($obj=mysql_fetch_object($sql)){
$news_title=$obj->news_title;
$news_text=$obj->new_text;
$news_id=$obj->news_id;
?>
<a href="read_news.php?id=<?php echo $news_id;?>"><?php echo $news_title;?></a> <br/>
<?php
}
?>
در این کد شما اومدی توی صفحه اصلی فقط عناوین خبر رو گرفتی و یک لینک درست کردی که عنوان اون همون عنوان خبرت هست و لینک به صفحه read_news.php میره و با آیدی همون خبر !
مثلا لینک اون صفحه میشه :

http://www.yoursite.com/read_news.php?id=asd123456
حالا میای توی صفحه read_news.php این کد رو مینویسی :


$news_id=$_GET['id'];
$sql=mysql_query("SELECT * FROM `news` WHERE `news_id`='$news_id'");
$obj=mysql_fetch_object($sql);
$news_title=$obj->news_title;
$news_text=$obj->news_text;
//.. and more
echo $news_title."<br/>";
echo $news_text;
در این کد هم شما اول اومدی آیدی خبر رو که توی لینک با متغیر GET هست رو میگیری بعد خبر مربوط به اون آیدی رو از دیتابیس میگیرید و در نهایت اون رو چاپ میکنید !
امیدوارم منظورتون همین بوده باشه !
موفق باشید !
آها حالا گرفتم چی شد :D
حالا زیاد درگیره درگیر هم نبودم

siavashsay
سه شنبه 03 بهمن 1391, 13:05 عصر
و اگر يه نفر اومد و شماره دلخواه خودش رو گذاشت بازم فرقي نمي كنه نهايتش اينه كه شما پيغام مي دين كه همچين خبري پيدا نشد
دوست عزیز !
ورودی ها مخصوصا GET باید حتما چک بشن !
اگر بنده هم چیزی توی کدهام ننوشتم واسه این بود که خواستم فقط لوپ مطلب رو برسونم !
برای چک کردن توی این فروم زیاد تاپیک هست !
اما شما سعی کنید که آیدی ای که برای خبرها استفاده میکنید فقط شامل حروف و اعداد باشه ! بعد از اون میتونید به این صورت فیلتر کنید کدتون رو :

$news_id=$_GET['id'];
if(!ctype_alnum($news_id)){
header("Location:index.php?errorID=1");
exit;
}
توی این کد تابع ctype_alnum چک میکنه که آیدی فقط شامل حروف و اعداد باشه و اگر نبود کاربر رو به صفحه اصلی هدایت میکنه و بقیه کار ها توسط exit قابل اجرا نیستند !
برای اینکه کاربر متوجه شه قضیه چیه یک handler هم گذاشتیم توی تابع header یعنی errorID=1
این واسه اینه که شما معلوم کنی کد خطا چیه و توی صفحه index.php بیای و errorID رو با GET بگیری و بگی اگر برابر بود با 1 پس قضیه اشتباه بودن آیدی اخبار بوده و یک پیغام خطا برای اون درست کنی که به کاربر نشون بدی - این کد مثال برای صفحه index.php هست :

if(isset($_GET['errorID'])){
$errid=$_GET['errorID'];
if($errid==1){
echo " خبر مورد نظر یافت نشد ";
}
}
حالا اگر موارد دیگه ای هم بود میتونید توسط همین errorID به صفحه اصلی بفرستین و بقیه خطاها رو نشون بدین ! مثلا 2 برابر با خطای نبودن عنوان خبر - 3 برابر با نبودن آی دی خبر و خلاصه .... !
موفق باشید

Reza1607
سه شنبه 03 بهمن 1391, 13:19 عصر
دوست عزیز !
ورودی ها مخصوصا GET باید حتما چک بشن !
اگر بنده هم چیزی توی کدهام ننوشتم واسه این بود که خواستم فقط لوپ مطلب رو برسونم !
";
}
}[/PHP]
حالا اگر موارد دیگه ای هم بود میتونید توسط همین errorID به صفحه اصلی بفرستین و بقیه خطاها رو نشون بدین ! مثلا 2 برابر با خطای نبودن عنوان خبر - 3 برابر با نبودن آی دی خبر و خلاصه .... !
موفق باشید


در مورد امنيتش هم شما بايد به عنوان برنامه نويس ورودي ها رو چك كنيد.

والا من جوابي كه دادم به سوال ايشون در مورد امنيت بود و منظورم كد شما نبود و همچنين تو پست قبلي هم گفته بودم كه براي امنيت بايد ورودي چك بشه و فقط مي خواستم اصل مطلب رو بگم