PDA

View Full Version : سوال در مورد مدیریت url ها



hejjat
جمعه 04 آبان 1386, 12:56 عصر
اگه به هر دلیلی یه آدرس نا معتبر از سرور تقاضا بشه چطوری می شه مدیریتش کرد؟ مثلا کاربر شیطنت کنه و کوئری استرینگ توی آدرس رو دست کاری کنه و یا اینکه صفحه ای پس از اینکه یه موتور سرچ کشش کرده حذف شده باشه و کاربر از طریق موتور سرچ به اون صفحه هدایت بشه

اگه یه خورده راهنماییم کنین بسیارها ممنون میشم.

sweb
جمعه 04 آبان 1386, 19:11 عصر
اگه یه خورده راهنماییم کنین بسیارها ممنون میشم.



برای شیطنت کاربر که تو باید سعی کنی طوری برنامه رو بنویسی که راهی واسه نفوذ از طریق کوئیری های HTTP باقی نذاری!

برای ارجاع به صفحه ای که کاربر به اشتباه یا ... وارد میشن که موجودیت نداره باید ERORR 404 تنظیمات Apache رو تنظیم کنی که منابعش تو ساتش هست اگه سرچ هم بکنی Tutorial هاش زیاده!

برای Optimize شده برای موتور های جستجو هم باید صفحه هاتو توری بنویسی که از اول مبتنی بر SEO باشه. واسه اینکه به بهترین شکل ممکن صفحاتتو در اختیار موتور های جستجو بزاری میتونی از استاندارد XML نقشه سایت که تو سایت www.sitemap.org (http://www.sitemap.org/) هستش بهره بگیری.




موفق باشی :لبخندساده:

Bahram0110
شنبه 05 آبان 1386, 16:37 عصر
اگه به هر دلیلی یه آدرس نا معتبر از سرور تقاضا بشه چطوری می شه مدیریتش کرد؟ مثلا کاربر شیطنت کنه و کوئری استرینگ توی آدرس رو دست کاری کنه و یا اینکه صفحه ای پس از اینکه یه موتور سرچ کشش کرده حذف شده باشه و کاربر از طریق موتور سرچ به اون صفحه هدایت بشه

اگه یه خورده راهنماییم کنین بسیارها ممنون میشم.

اگه کاربر یه درخواست مثل

index.php?page=sample1داشته باشه . . .
توی index.php بررسی می کنی که آیا فایل sample.php وجود داره یا نه

if (file_exists($page . ".php")) {
include ($page . ".php");
}else {
echo "صفحه پیدا نشد";
}

cybercoder
شنبه 05 آبان 1386, 17:33 عصر
خوب حالا گیرم که یکی اومد و مستقیم sample1 تو Load کرد اونوقت چی ؟

Bahram0110
شنبه 05 آبان 1386, 18:13 عصر
خوب حالا گیرم که یکی اومد و مستقیم sample1 تو Load کرد اونوقت چی ؟

اولا : حتما که نباید مستقیم اسم فایل رو بنویسیم
ثانیا : توی خود sample.php می تونیم این مورد رو چک کنیم

cybercoder
یک شنبه 06 آبان 1386, 00:31 صبح
ثانیا : توی خود sample.php می تونیم این مورد رو چک کنیم

چطور؟
( البته به غیر از چک کردن متغیری که ست شده یا نشده)
منظورم از دو تا پستی که زدم اینه که بحث کمی بازتر شه

موفق باشی

Bahram0110
یک شنبه 06 آبان 1386, 09:22 صبح
برای مثال می گم :
توی فایل index.php یه متغیر تعریف می کنیم و بهش مقدار می دیم

توی sample.php وجود اون متغیر و مقدارش رو چک می کنیم
بقیش هم که معلومه . . .

Bahram0110
یک شنبه 06 آبان 1386, 10:34 صبح
راه دیگه هم اینه که از .htaccess استفاده کنیم . . .
صفحات رو توی یه فولدر جداگانه قرار می دیم مثلا : Page
فایل .htaccess رو با محتوای

deny from all
می سازیم و داخل فولدر Page کپی می کنیم
از این پس کسی نمی تونه حتی با دونستن نام فایل ها بطور مستقیم اونا رو درخواست کنه
فقط include !

delphi77
سه شنبه 30 بهمن 1386, 08:12 صبح
راه دیگه هم اینه که از .htaccess استفاده کنیم . . .
صفحات رو توی یه فولدر جداگانه قرار می دیم مثلا : Page
فایل .htaccess رو با محتوای

deny from all
می سازیم و داخل فولدر Page کپی می کنیم
از این پس کسی نمی تونه حتی با دونستن نام فایل ها بطور مستقیم اونا رو درخواست کنه
فقط include !

اگر ممکنه این مورد را بیشتر توضیج بدید

majoran
سه شنبه 30 بهمن 1386, 08:43 صبح
اینو بخونی فول میشی برای امنیت سایت توپ توپ بهترین کار اینه که کاربر نفهمه به چه زبونی برنامه نوشتی بعد صفحاتت برای کاربرا کور میشه
سلام به همگی

مدتی هست قراره این مطلب رو توضیح بدم اما مشکلات نمیزاشت الان که دیدم تایم خالی دارم فکر کردم بهترین کار نوشتن این آموزشه
درخواست ها و سوالات متعدد کاربران آپاچی سرور در مورد این مطلب خیلی زیاده اگه یه سرچ کوچک داشته باشید کلی سوال در مورد این موضوع خواهید دید از طرفی من لحاظ میکنم که کلیه کسانی که دارند این مقاله رو می خونند حتما اطلاعاتی ابتدایی در مورد htaccess دارند و میدونید حکایت چیه . . .

همونطور که خیلی از شما میدونید این مبحث خیلی طولانی هست از این رو خلاصه نویسی توی این مقاله خیلی زیاده اما مسلما منظور من برای کاربران حرفه ای و آماتور روشنه یه سری مثال ها رو از اینترنت پیدا کردم یعنی کرده بودم برمیگرده به سال ها پیش . . .


برای شروع فکر میکنم همه بدونید که فایل .htaccess یا Distributed Configuration Files در واقع فایلهای مخصوص کنترل آپاچی هست مکان خاصی ندارند روی هر شاخه و زیر شاخه تاثیر میزاره در واقع در کنار فایل های معمولی مثل php ,html قرار میگیره یعنی کاملا در دسترس هستند نام این فایل ها .htaccess هست یعنی صرفا همین -البته میشه یه سری تنظیمات رو دستکاری کرد و نام رو تغییر داد- این فایلها از تگهای مخصوص آپاچی استفاده میکنن البته cgi script هم می پذیرن

کاربردها :

کاربرد اول- تغییر صفحات خطا

برای نمایش صفحات خطا مثل 404 یا 500 و ... میتونید صفحات دلخواه خودتون رو طراحی و به این طریق نمایش بدید
مسلما خیلی حرفه ای هست وب سایت هایی که برای کوچکترین موارد پیش بینی صورت بگیره

کد:
ErrorDocument 404 /404.html ErrorDocument 500 /500.html


کاربرد دوم- نمایش پسوند دلخواه صفحات (add mime type)

یک راه امنیتی که من واقعا پیشنهاد میکنم واسه حفاظت از اسکریپت های php شما اینه که اونا php نباشن !! بله یعنی مثلا asp یا jsp باشن اینطوری یه مقدار مطلب پیچیده میشه برای تشخیص

کد:
AddType application/x-httpd-php .asp .jsp
Addtype میگه که ما میخوایم یه فرمت جدید بشناسونیم بعد نوع اون فایلهای خاص با فرمت دلخواه رو میگیم مثلا image/png یا text/css بعد میگیم که چه فرمتی رو از این به بعد به عنوان نوعی که گفتیم بشناس
اما فرض کنید میخواید از shtml , ssl در سایتتون استفاده کنید و نیاز به شناساندن این فرمتها به آپاچی دارید :

کد:
AddType text/html .shtml AddHandler server-parsed .shtml Options Indexes FollowSymLinks Includes
کاربرد سوم- redirect ریدایرکت

کد:
Redirect /Dirold/test.html http://site.com/DirNew/new.html
توضیح: در اینجا مرورگری که درخوست فایل test.html رو در شاخه dirold داشت بره به آدرس
http://site.com/DirNew/new.html (http://site.com/DirNew/new.html)

دوستانی که در زمینه SEO فعالیت دارند میدونند که این ریدایرکت چقدر موثره

کاربرد چهارم - IndexIgnore

بسیاری از هکرها بعد از نفوذ با browse کردن در دایرکتوریهای سایت شما و گشتن به دنبال فولدرها یا فایلها با پرمیشن مطلوب کارشونو تکمیل میکنن و البته خیلی ها از اول از روش دید زدن فولدرهایی که حاوی موتور اسکریپت ها و اطلاعات با ارزشی هستن مثلا فایل config رو در بردارن به سایت نفوذ میکنن
programer ها جهت جلوگیری از این کار میان و یه index.html خالی درست میکنن اما با این کد میشه یه صفحه مربوط به خالی بودن فولدر رو نشون داد یعنی هیچی تو این شاخه نیست در حالی که شاخه میتونه پر فایل باشه ...

خیلی جالبه الان میتونم چندتا سایت پربازدید رو معرفی کنم که این مشکل رو دارند نکته خیلی جالبتر اینه که من مدتی پیش یک اسکریپت به دستم رسید داشتم ویرایشش میکردم و توابع اسمارتی رو بررسی میکردم که دیدم چندتا فایل کم هست یعنی چندتا صفحه نافص بود هرچقدذر نوشتم نتونستم اتصالات رو پیدا کنم تا اینکه برای تست رفتم وارد سایت تولید کننده این نرم افزار شدم از اونجایی که نسخه دمو روی سرور Run شده بود رفتم به دایرکتوری موردنظر با کمال تعجب دسترسی در پوشه تمپلیت مربوط به فایل های TPL باز بود منم با کمال لطف فایل های موردنظر رو برداشتم به همین راحتی

شاید در ظاهر استفاده از این طرفند خیلی پیش پا افتاده باشه اما میدونم خیلی از افراد به آسونی از کنارش میگذرند

کد:
IndexIgnore *
- اگه مثلا خواستید فقط یه نوع فایل محافظت شه مثلا فقط فایلهای pdf مینویسیید :

کد:
IndexIgnore application/pdf

کاربرد پنجم - از index.php یا index.html خسته نشدید؟

با این کد هم میشه به وب سرور امر کرد که کدام فایل به عنوان صفحه نخست نمایش داده بشه

کد:
DirectoryIndex homearea.php
homearea.php رو به هر فایلی با هر نامی تغییر بدید.
- DirectoryIndex یه فاصله و بعد نام فایل با هر فرمتی


کاربرد ششم - DefaultCharset

بسیاری از مشکلات دوستان نمایش انکودینگ صفحات اینترنتی هست با دستور زیر میتونید آپاچی رو مقید کنید تا Charset موردنظر شما رو ایجاد کنه

کد:
AddDefaultCharset utf-8
کاربرد هفتم - deny from all

جهت حفاظت فایل های باز ارزش ولی محافظت نمیشن ( مثلا mt-config.cgi ) این کد میگه که هیچ مرورگر ی نتونه سورس اینها رو ببینه

کد:
<Directory /> Order Deny,Allow Deny from All </Directory>

البته میشه این دسترسی رو فقط واسه یه آی پی محدود کرد

کد:
order allow,deny deny from 123.45.6.7 deny from 012.34.5. allow from all

کاربرد هشتم -امنیت بیشتر


دو تا کد امنیتیه دیگه

کد:
<Limit POST PUT DELETE> </Limit>
کارش که مشخصه فکر کنم

کد:
<LimitExcept POST GET> </LimitExcept>
شما به بومبرینگ اعتقاد دارید ؟ این کد جلوی FSOCKOPEN رو میگیره

کاربرد نهم - rewrite engine

اول از همه Apache RewriteEngine باید در وب سرور شما فعال باشه .
اگه دسترسی دارید میتونید این خط رو در httpd.conf اضافه کنید :

کد:
LoadModule rewrite_module modules/mod_rewrite.so
اگرم بهش دسترسی ندارید این کد هم شاید بتونه کار کنه باید تو همون htaccess کپی کنید

کد:
<IfDefine ReverseProxy> LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_module modules/libproxy.so </IfDefine>

این همون چیزیه که واسه ساب دومین مجازی هم به کار میبریم من یه مثال سادشو واستون میزنم
فرض کنید یه وبلاگ داشتید با این آدرس http://www.majidonline.com/siavashmusic (http://www.majidonline.com/siavashmusic)
حالا بلاگتون آدرسش عوض شده به این http://www.majidonline.com/Majid (http://www.majidonline.com/Majid)
البته دقت داشته باشید این هیچ ربطی به redirct نداره
**این مورد رو دوستانی که به SEO وارد هستند میتونند متوجه بشن که ریدایرکت با ریرایت خیلی فرق داره از نظر نتیجه ای که در اینده برای ما در برخواهد داشت

کد:
RewriteEngine on RewriteRule ^ehsan(/.*)?$ /knowhow$1 [R=permanent]
یکی از بهترین امکاناتی که اپاچی بهتون میده بهش mod_rewrite هستش که باعث میشه سایتتون خیلی تمیزتر بنظر بیاد و به عبارتی SEO بشه !!!
تو هرجایی که شما بخواید از mod_rewrite استفاده کنید نیاز دارید که کد

کد:
Options +FollowSymlinks RewriteEngine on
رو در فایل تون قرار بدید
بزارید یک مثال بزنم , میخوایم تمام صفحات php رو تبدیل کنیم به html :

کد:
Options +FollowSymlinks RewriteEngine on RewriteRule ^(.*).htm$ $1.php [nc]
در دستور بالا ما گفتیم هر فایل php بود تبدیلش کن به .htm ولی این دلیل براین نیست که فرمت فایل عوض میشه نه!!! بلکه به هردو صورت دسترسی به فایل امکان پذیر هست برای مثال اگه یه فایل test.php داشته باشیم هم میتونیم با اسم test.htm بهش دسترسی پیدا کنیم و هم از test.php .
[nc] : این دستور یعنی No Case یا همون case-insensitive

فرض میکنیم اسم دومینمون رو عوض کردیم ولی فایل هامون همون قبلی ها هستن و میخوایم هرکسی تو دومین اولی یک فایل رو فراخوانی کرد ما همون فایل رو تو دومین دوم صدا بزنیم اینجور عمل میکنیم :


کد:
Options +FollowSymlinks rewriteengine on rewriterule ^(.+).htm$ http://clicksor.ir/$1.php [r=301,nc]
301 یعنی مستقیما ریدایرکت شده , دستور بالا زمانی خوبه که یه سایت قدیمی داریم حالا میخوایم update کنیم این کار باعث میشه موتورهای جستجوگر نتایج ما رو اتوماتیک آپدیت کنند

اینجا رو ببینید »

کد:
Options +FollowSymlinks RewriteEngine on RewriteRule ^myfiles/(.+)/(.+).zip download.php?section=$1&filename=$2 [nc]
بزارید ساده بگم اگه شما عبارت (.+) رو مساوی با 1$ فرض کنیم ( 1$=(.+) )ما میتونیم چندین بار از این عبارت استفاده کنیم به این صورت که بار اول که از (.+) استفاده میکنیم مساوی با 1$ میگیریم در دفعه دوم مساوی با 2$ میگیریم و همینطور الا اخر .
در مثال بالا برای مثال اگه ما یه فایل در مسیر

کد:
http://clicksor.ir/download.php?section=appz&filename=Siavash
داشته باشیم این لینک از ادرس زیر هم در دسترس خواهد بود :

کد:
http://clicksor.ir/myfiles/appz/Siavash.zip

مثال :

کد:
Options +FollowSymlinks RewriteEngine on RewriteRule ^blog/([0-9]+)-([a-z]+) http://clicksor.ir/weblog/index.php?archive=$1-$2 [nc]
حالا اگه ادرس ارشیو وبلاگ ما بصورت :

کد:
http://clicksor.ir/weblog/index.php?archive=2007-sep
باشه تبدیل میشه به :

کد:
http://Persiandev.net/blog/2007-sep
با کمی Regular Expression میتونید ادرس هاتون رو خیلی حرفه ای تر کنید و زیباتر

راهنما دستورات :


کد:
. Any single character [chars] یکی ار کاراکترها میتونه این باشه برای مثال [A] [^chars] هیج یک از این کاراکتر ها نباشه برای مثال [^A] text1|text2 همون کار or رو انجام میده Quantifiers: ? میتونه یک کاراکتر باشه و یا هیچ کاراکتری * هرچیزی میتونه باشه حتی اگه چیزی وجود نداشته باشه + حداقل یک کاراکتر وجود دارد Grouping: (text) برای ساختن گروه بکار میره Anchors: ^ شروع $ پایان Escaping: char برای مثال برای درنظر نگرفتن علائمی مثل [] یا . یا غیره هست در این مواقع به عنوان دستور در نظر نمیگیره
مثال

کد:
Options +FollowSymlinks RewriteEngine On RewriteRule ^get(.*) /public/download/download.php$1
در مثال بالا ما گفتیم هر ادرسی که بعد از download.php قرار گرفت تبدیلش کنه به ادرس برای مثال
اگه ادرسمون اینجوری باشه :

کد:
http://clicksor.ir/downloads/download.php?myfile=Siavash.zip
تبدیل میشه به :

کد:
http://clicksor.ir/Get?myfile=Siavash.zip
در مثال بعدی میخوایم دسترسی به پوشه هارو بگیریم از کاربر

کد:
Options +FollowSymlinks RewriteEngine on RewriteRule ^(.*)$ deny.php [nc]
تو قسمت بالا اگه کاربر بخواد به هر نحوی وارد یه پوشه بشه ریدایرکت میشه به deny.php
بزارید در مثال بعدی کاری کنیم که فقط به فایل های خاصی دسترسی داشته باشه و بجز اون هر فایلی خواست باز کنه ارور بده :
کد:
Options +FollowSymlinks RewriteEngine On rewritecond %{REQUEST_FILENAME} !^(.+).css$ rewritecond %{REQUEST_FILENAME} !^(.+).js$ rewritecond %{REQUEST_FILENAME} !file.php$ RewriteRule ^(.+)$ /deny/ [nc]
تو دستور بالا ما گفتیم فقط به فایل هایCss Js و فایل file.php اجازه بده که توسط کاربر فراخوانی بشه در غیر اینصورت ریدایرکت کنش به پوشه /deny/ .


HotLinking مثال

کد:
Options +FollowSymlinks # no hot-linking RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?clicksor\.ir/ [nc] RewriteRule .*.(gif|jpg|png)$ http://clicksor.ir/red.jpg [nc]
خوب فکر نمیکنم زیاد لازم به توضیح باشه کد بالا هر درخواستی رو که برای لود کردن عکس با فرمت gif,jpg,png از یه سایت دیگه باشه عکس http://clicksor.ir/red.jpg (http://clicksor.ir/red.jpg) نمایش داده میشه .

اضافه کردن WWW به ادرس سایت :
این کد این کار رو براتون میکنه :

کد:
Options +FollowSymlinks RewriteEngine on rewritecond %{http_host} ^www.clicksor.ir [nc] rewriterule ^(.*)$ http://clicksor.ir/$1 [r=301,nc]
در واقع یه نوع ریدایرکت هستش البته از نوع peremantly moved .

ترجمه سایت :

کد:
Options +FollowSymlinks RewriteEngine on RewriteRule ^(.*)-fr$ http://www.google.com/translate_c?hl=fr&sl=en&u=http://clicksor.ir/$1 [r,nc] RewriteRule ^(.*)-de$ http://www.google.com/translate_c?hl=de&sl=en&u=http://clicksor.ir/$1 [r,nc] RewriteRule ^(.*)-es$ http://www.google.com/translate_c?hl=es&sl=en&u=http://clicksor.ir/$1 [r,nc] RewriteRule ^(.*)-it$ http://www.google.com/translate_c?hl=it&sl=en&u=http://clicksor.ir/$1 [r,nc] RewriteRule ^(.*)-pt$ http://www.google.com/translate_c?hl=pt&sl=en&u=http://clicksor.ir/$1 [r,nc]
در کد بالا در صورتی که به اخر یک لینک یا ادرس یکی از کلمات de , -fr , -pr, -it- اضافه بشه توسط گوگل میتونید ترجمه کنید .
عوض کردن نوع لینک برای مثال نوع ادرس عکس :

کد:
Options +FollowSymlinks RewriteEngine on RewriteRule ^pictures/(.*) http://clicksor.ir/getpicture.php?$1 [r]
خاموش و روشن کردن رجیستر گلوبال جهت اینستال برخی از برنامه ها

کد:
php_flag register_globals on
منبع : سایت آموزش (http://www.tutorials.ir/)
__________________

Bahram0110
سه شنبه 30 بهمن 1386, 13:33 عصر
اگر ممکنه این مورد را بیشتر توضیج بدید

همهء فایل هاتو (به جز index.php) می زاری تو یه پوشه
یه فایل می سازی به نام


.htaccess
با NotePad یا هر چیز دیگه ای فایل رو باز می کنی و توش می نویسی Deny from all
و کپیش می کنی تو همون پوشه که فایل ها رو کپی کردی
بعد باید توی index.php فایل های فرعی رو Include کنی (با آدرس مستقیم باز نمی شن!)

ببخشید یکم گیج کننده بود