Archive for مهر, ۱۳۸۸

با فایل .htaccess کنترل را در دست بگیرید – قسمت دوم

مهر ۱۲م, ۱۳۸۸

در ادامه بحث Authorization می‌خوام دو تا از دستوراتی را معرفی کنم که شبیه دستورات شرطی عمل می‌کنند. اولین <Files></Files> و دیگری <Directory></Directory> است. Filesبر روی فایل‌ها و Directory بر روی شاخه‌ها اعمال می‌شوند. به مثال زیر توجه کنید:

<Files *.jpg>

Order Allow,Deny

                             Allow from 123.123.123.123

</Files>

 

با این دستور، و البته با فرض اینکه IP سرور شما ۱۲۳/۱۲۳/۱۲۳/۱۲۳ باشد، شما اجازه استفاده از عکس ها را فقط به سرور خود میدهید. در این صورت اگر در سرورهای دیگر عکسی با منبع سایت شما داشته باشند، سرور شما از نمایش آن جلوگیری خواهد کرد. با این روش شما از افتادن ترافیک سایت‌های دیگر بر دوش سرور خود جلوگیری می‌کنید. یا یک مثال کاربردی‌تر اینکه

<Files *.php>

                             Order Allow,Deny

</Files>

با این کار از اجرا و نمایش تمام فایل های php جلوگیری می‌کنید. البته نکته مهمی وجود دارد و آن این است که برای دستوراتی شبیه require و include در برنامه نویسی مشکلی از نظر دسترسی پیش نخواهد آمد. اما اگر به جای PHP تمام فایل‌ها را در این ماجرا شریک کنید (توسط*.* ) ، نمی توانید فایل‌های CSS یا JS را در برنامه خود استفاده کنید. چون این فایل‌ها توسط مرورگر شناسایی شده و درخواست آنها صادر می‌شود (برخلاف php که موقع اجرا توسط آپاچی اضافه می‌شوند.)

 

Redirect 

انتقال شاخه‌ به مسیر جدید به دو حالت صورت می‌گیرد؛ شکل ساده و شکل دارای عبارت منظم. این انتقال توسط کد ۳۰۱ به مرورگر ارسال شده است. در صورتی که این کد نوشته نشود، بصورت پیش‌فرض ۳۰۲ ارسال خواهد شد. این کدها از نظر موتورهای جستجوگر بسیار مهم است و کسانی که روی سئو SEO یا Search Engine Optimization کار می‌کنند باید به این‌ها نیز توجه کنند.

Redirect 301 /olddir/oldfile.html http://example.com/newdir/newfile.html

RedirectMatch 301 /oldDir/(.*) /newDir/$1

 

۳۰۱ – Moved Permanently یا انتقال دائمی. در صورتی که برای همیشه از مسیر جدید استفاده خواهید کرد، حتما” توسط کد ۳۰۱ صفحه را ارسال کنید. با این کار موتورهای جستجو آدرس جدید را بجای آدرس قبلی قرار خواهند داد.

۳۰۷ – Temporary Redirect یا انتقال موقت.
مدیریت خطاها (Error Handling)

لیست کاملی از خطاهایی که میتوانید به جای نمایش آنها، این صفحات را برای خود سفارشی کنید:

ErrorDocument 400 /errors/file.php?error=400
ErrorDocument 401 /errors/file.php?error=401
ErrorDocument 402 /errors/file.php?error=402
ErrorDocument 403 /errors/file.php?error=403
ErrorDocument 404 /errors/index.php?error=404
ErrorDocument 405 /errors/index.php?error=405
ErrorDocument 406 /errors/index.php?error=406
ErrorDocument 407 /errors/index.php?error=407
ErrorDocument 408 /errors/index.php?error=408
ErrorDocument 409 /errors/index.php?error=409
ErrorDocument 410 /errors/index.php?error=410
ErrorDocument 411 /errors/index.php?error=411
ErrorDocument 412 /errors/index.php?error=412
ErrorDocument 413 /errors/index.php?error=413
ErrorDocument 414 /errors/index.php?error=414
ErrorDocument 415 /errors/index.php?error=415
ErrorDocument 416 /errors/index.php?error=416
ErrorDocument 417 /errors/index.php?error=417
ErrorDocument 500 /errors/index.php?error=500
ErrorDocument 501 /errors/index.php?error=501
ErrorDocument 502 /errors/index.php?error=502
ErrorDocument 503 /errors/index.php?error=503
ErrorDocument 504 /errors/index.php?error=504
ErrorDocument 505 /errors/index.php?error=505

در مواقع رخ دادن هرکدام از این خطاها، صفحه به آدرس مورد نظر ارجاع داده خواهد شد. در ضمن میتوانید یک پیغام را نمایش دهید:

ErrorDocument 404 “<b>Page Not Found</b>”

 

تنظیمات PHP (php.ini) 

فلگ‌ها توسط php_flag و مقادیر توسط php_value کنترل می‌شوند.نمونه‌هایی را در زیر می‌بینید:

php_flag asp_tags off
php_flag register_globals off
php_flag session.auto_start on
php_flag display_errors off
php_value upload_max_filesize 8M
php_value session.cookie_lifetime 3600

 

گروه دستورات بعدی توسط ماژول mod_mime اجرا می‌شوند و فایل مبدأ آنها mod_mime.c است. این ماژول امکاناتی را برای مشخص کردن تایپ فایل‌ها و مشخصات آنها فراهم می‌آورد.(در واقع محتوای Header هدر صفحه کنترل می‌شود.)

AddDefaultCharset utf-8

AddCharset windows-1256 .html

AddLanguage fa .php

اگر واقعا” از نوشتن متاتگ برای ست کردن charset خسته شده‌اید، خط اول بسیار به کار شما می‌آید. AddCharset نیز charset مورد نظر را فقط برای پسوند خاصی ست می‌کند. AddLanguage نیز زبان فارسی (یا مخفف آن fa) را به Content-Language در Header صفحات پی اچ پی اضافه میکند.

AddEncoding x-gzip .gz
AddEncoding x-compress .z

این دستور نیز برای ست کردن Content-Encoding هدر بکار می‌رود.

 

AddType image/gif .photo

AddType application/x-httpd-php .asp .jsp

AddType text/css .mycssext

خب این قسمت خیلی جذاب و کاربردی است. شما توسط AddType یک تایپ جدید یا پسوند جدید تعریف می‌کنید. با این کار هکرها به راحتی متوجه php بودن کد شما نمی‌شوند. (البته اگر مسائل دیگری مثل X-Powered-By را درنظر گرفته باشید!!) برای مثال من در خط اول، پسوندهای photo را عکس‌های gif معرفی کرده‌ام. خط دوم، خواسته‌ام که تمام فایل‌هایی با پسوند asp یا jsp نیز از نوع  phpشناخته شوند و توسط مترجم php اجرا شوند. در نهایت گفته‌ام که پسوندهایی mycssext فایل‌های مربوط به css هستند. بعنوان مثال شاید کاربرد این دستور را در سایت بانک ملت (فایل‌هایی با پسوند bm) دیده باشید!

<Location /images>

    ForceType image/gif

</Location>

درصورتی که فایل‌های شاخه images توسط مرورگر درخواست شوند، جدای از پسوند آنها، مرورگر مجبور به پردازش آنها بعنوان عکس با پسوند gif خواهد بود.

Posted in دسته‌بندی نشده‌ها | Comments (۲)

با فایل .htaccess کنترل را در دست بگیرید – قسمت اول

مهر ۱۱م, ۱۳۸۸

چند پست قبل یکی از کاربردهای این فایل رو بررسی کردم، اما در این پست می‌خوام بطور کامل در مورد این فایل صحبت کنم.

بدلیل نیاز طراحان و برنامه‌نویسان وب برای تغییر و کنترل وب سرور آپاچی بسته به نیاز خود و با هدف ایجاد کنترل دسترسی بر روی شاخه‌های مختلف فایل‌های .htaccess (یا hypertext access یا distributed configuration files) بوجود آمدند. چون در سیستم عامل های Unix فایل‌هایی که با نقطه (dot) شروع می‌شوند مخفی هستند، نام این فایل با نقطه شروع می‌شود و بهمین دلیل این فایل در سیستم عامل ویندوز بطور معمولی قابل ایجاد نیست. اگر از سیستم عامل ویندوز استفاده میکنید، برای ساختن این فایل میتوانید از این اسکریپت php کمک بگیرید:


<?php
$fp=fopen('.htaccess','w+');
fclose($fp);
?>

این فایل در هر شاخه می‌تواند ایجاد شود و قوانین آن بر روی شاخه جاری و تمام زیرشاخه‌ها اعمال می‌شود. از عمده‌ترین موارد استفاده فایل .htaccess میتوان به تصدیق و اجازه (Authentication  و Authorization )، ترجمه‌ی URLها و مدیریت خطاها اشاره کردکه در زیر به شرح آنها خواهم پرداخت.

 

تصدیق کاربر (Authentication)

امکانی که به شخصی‌سازی صفحات وب کمک میکند.

AuthType Basic

AuthUserFile /usr/username/.htpasswd

AuthName “My Secret Area”

Require valid-user

خط اول، توع تصدیق را Basic معرفی میکند. دومین خط مسیر کامل (و نه نسبی) فایل حاوی نام کاربری و رمزعبور است. لیست نام‌های کاربری و رمزهای عبور در این فایل که با نام .hpasswd مشخص میشود بصورت زیر است:

username1:password1

username2:apr1.KB4i…ykeDUewbZvNgqrlXnecld0

درمورد دومین خط رمزعبور باید بگم که شما میتونید رمزعبور خودتون رو بصورت کد شده توسط الگوریتم MD5 بگذارید. سایت‌هایی هستند که این کار رو انجام میدهند مثل این.

سومین خط این کد، توضیحی است که به کاربر درمورد درخواست رمزعبور نمایش داده می‌شود.

و بالاخره خط چهارم این امکان را فعال می‌کند.

 

اجازه‌های دسترسی (Authorization)

که با دو دستور Allow یا Deny و توسط ماژول mod_access صورت می‌گیرد. این اجازه‌ها می‌توانند بر روی نام میزبان، IP کاربر، نوع درخواست(یا Environment Variables) صورت گیرند. به مثال توجه کنید:

Allow from apache.org

Deny from 10.1.2.3

Deny from 10.1

Deny from 10.1.0.0/255.255.0.0

خط اول فقط به میزبان apache.org اجازه استفاده می‌دهد. خطوط بعدی اجازه را روی IP تعریف میکند.

SetEnvIf User-Agent Chrome let_me_in

Order Deny,Allow

Deny from all

Allow from env=let_me_in

این چهار خط بطور کلی دسترسی را برای همه کاربران می بندد! البته کاربرانی که با مرورگر Chrome وارد شده باشند، اجازه ورود دارند! جالب است، نه؟! )برای اینترنت اکسپلورر: MSIE، موزیلا فایرفاکس: Firefox و اپرا:Opera  تایپ کنید)

در مورد Order، همین طور که از نامش مشخص است، اولویت دستورهای Deny و Allow را مشخص میکند. شاید در این دستور نیازی به آن نباشد ولی درصورت نوشتن کدهای زیاد برای دسترسی های مختلف، ترتیب اولویت‌ها نیاز به مشخص شدن دارند.

Order Allow,Deny

به این معناست که تمام درخواست‌هایی که با حداقل یکی از گزینه های Allow مطابقت داشته باشند، اجازه ورود دارند. سپس درخواست‌هایی هم که با Deny مطابقت دارند ریجکت شده و بعد از آن تمام درخواست‌ها ریجکت می‌شوند.

Order Deny,Allow

نیز به این معناست که اول از تمام درخواست‌هایی که با Deny مطابقت دارند جلوگیری می‌شود. سپس بقیه درخواست‌ها پذیرفته می‌شوند. با این حساب کد زیر از نظر عملکرد شبیه کد بالاست:

SetEnvIf User-Agent MSIE let_me_in

Order Allow,Deny

Allow from env=let_me_in

و جدول خلاصه:

         نتیجه در Allow,Deny

نتیجه در Deny,Allow

مطابقت 

پذیرفته می‌شود

پذیرفته می‌شود

فقط با Allow

رد می‌شود

رد می‌شود

فقط با Deny 

رد می‌شود

پذیرفته می‌شود

بدون مطابقت 

رد می‌شود

پذیرفته می‌شود

با هر دو 

نکته ۱: تمام درخواست‌هایی که توسط Deny رد میشوند، با خطای ۴۰۳ (Forbidden) بازگردانده می‌شوند.

نکته ۲: چنین شرط هایی که مرورگر کاربر را چک میکنند، امنیت ضعیفی دارند چون UserAgent یا هدر مشخص کننده مرورگر کاربر، قابل تغییر است!

Posted in دسته‌بندی نشده‌ها | Comments (۰)

CUL.ir سایتی برای کاهش طول پیوندها با ایده‌های نو

مهر ۱۰م, ۱۳۸۸

بعد از بوجود آمدن سرویس‌هایی مینی بلاگ شبیه توییر و نمونه‌ی فارسی آن وی ویو بعلت محدودیت در نوشتن مطالب مخصوصا” انتشار پیوندها از این طریق، نیاز جدیدی بوجود آمد  براین اساس که لینک‌هایی با طول زیاد قابل انتشار نبودند و انتشار آنها با مشکل مواجه میشد. البته قبل از آنها نیز، بخاطر سپردن و ساده سازی لینک های طولانی چنین نیازی را بوجود آورده بود اما این سرویس‌ها چنین نیازی را پررنگ تر کردند. طبیعی است که چنین سایت‌هایی بسته به محبوبیت خود دارای عمر مفیدی هستند چون این سایت‌ها از الگوریتم‌هایی جهت ساده سازی لینک با کمترین حروف ممکن استفاده می‌کنند و چون تعداد کلمات و عبارات کوتاه (تا حدی که کاربران را راضی نگه دارد) بی نهایت نیست، با افزایش تعداد لینک‌های ثبت شده، در نهایت کارایی خود را از دست می‌دهند و ناچار جای خود را به رقبای خود واگذار میکنند.

سایت cul.ir به همین منظور ایجاد و مورد استفاده قرار گرفته است. البته خدماتی که این سایت به کاربران خود می‌دهد، دقیقا” شبیه رقبای خود نیست و ایده‌‌ و نوآوری‌ را همراه داشته است که به آنها اشاره می‌کنم.

جالب‌ترین امکانی که سایت cul.ir به شما میدهد این است که شما در هر لحظه و در هر صفحه‌ای از وب که باشید، قادرید همان آدرس جاری را در سایت cul.ir ثبت و لینک کوتاه شده آن را دریافت کنید. بدین صورت که بعنوان مثال من در آدرس:

http://www.xn--mgbx7cghb83g.com/1388/05/%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%D9%87%E2%80%8C%DA%AF%DB%8C%D8%B1%DB%8C-%D8%B2%D9%85%D8%A7%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%AC%D8%A7%D9%88%D8%A7-%D8%A7%D8%B3%DA%A9/

هستم. برای کوتاه کردن این لینک، کافی است در نوار آدرس مرورگر به اول این آدرس، آدرس سایت cul.ir را اضافه کنید که چیزی شبیه این میشود:

Cul.ir/ http://www.xn--mgbx7cghb83g.com/1388/05/%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%D9%87%E2%80%8C%DA%AF%DB%8C%D8%B1%DB%8C-%D8%B2%D9%85%D8%A7%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%AC%D8%A7%D9%88%D8%A7-%D8%A7%D8%B3%DA%A9/

بعد از وارد شدن به این آدرس، لینک کوتاه شده خود را دریافت کنید. :)

http://cul.ir/8f

Posted in دسته‌بندی نشده‌ها | Comments (۰)