PDA

View Full Version : سوال: توی htaccess چه کدی می تونم استفاده کنم تا کاربر نتونه تگهای <script> رو توی url قرار بده؟



idocsidocs
چهارشنبه 03 اسفند 1390, 02:05 صبح
توی htaccess چه کدی می تونم استفاده کنم تا کاربر نتونه تگهای <script> رو توی url قرار بده؟

MostafaEs3
چهارشنبه 03 اسفند 1390, 04:19 صبح
//////////

wallfa
چهارشنبه 03 اسفند 1390, 09:58 صبح
یه مقاله به نام هویت سنجی دارم برو بخون به دردت میخوره !
البته سه قسمت از قسمت اول بخون ! http://www.wallfa.com/

idocsidocs
چهارشنبه 03 اسفند 1390, 11:10 صبح
یعنی چی نتونه تگهای اسکریپت توی URL قرار بده ؟؟ من منظورت رو درست متوجه نشدم ولی این تابع شاید بدردت بخوره :
منظورم اینه که کاربر نتونه یه لینک شبیه به لینک زیر ایجاد کنه:

<a href="http://site.com?id=<script>alert('HACK MSG');</script>">click</a>

MostafaEs3
چهارشنبه 03 اسفند 1390, 11:28 صبح
//////////

maysam3
چهارشنبه 03 اسفند 1390, 11:33 صبح
می تونی اینو تو htaccess بنویسی


RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]

با این دستور ما از طریقه apache به سیستم میگیم که هر موقع درخواستی به سمت سرور فرستاده شد اگر در url مودر نظر تگ <script> وجود داشت اون رو خنثی کن و بلاک بشه، توجه کن که این کد به کد‌های درون سیستم (سایت) کاری نداره و فقط روی url تاثیر دارد.

idocsidocs
چهارشنبه 03 اسفند 1390, 12:22 عصر
الان من کد زیر رو توی لینک گذاشتم ولی صفحه 404 نمایش داده نمی شه. لطفا بگید مشکل از کجاست؟

http://localhost/photo.php?src=/admin<script>5555555555</script>
کد htaccess


RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteRule ^(.*)$ router.php?id=404 [F,L]

eshpilen
چهارشنبه 03 اسفند 1390, 12:33 عصر
فکر نمیکنم htaccess برای این کارها مناسب باشه. یعنی برنامه خودش هست که باید امن نوشته بشه و جلوی این موارد رو بگیره. یعنی ولیدیشن کامل. اگر id قراره عدد باشه خب باید قبل از استفاده بررسی بشه؛ یا درواقع قبل از درج در صفحه. چون این حملات مطابق نمونه ای که گذاشتی در مواردی کار میکنن که اون ورودی (مقدار id) در جایی در کد HTML صفحه درج میشه. اگر id قراره هر شکلی داشته باشه خب باید قبل از استفاده چک بشه و در این زمینه قدرت رگولار اکسپرشن ها رو هم میشه بکار گرفت. اما یک روش ساده تر هم وجود داره:

echo htmlspecialchars($id, ENT_QUOTES, 'UTF-8');
یعنی بیایم و بجای ولیدیشن یا حذف کردن، بوسیلهء تابع htmlspecialchars کاری کنیم که کدهای تزریق شده در سورس بی اثر بشن.

htmlspecialchars برای موقعی هست که میخوایم ورودی کاربر رو با HTML ترکیب کنیم، همونطور که mysql_real_escape_string برای موقعی هست که میخوایم ورودی کاربر رو با SQL ترکیب کنیم.

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

eshpilen
چهارشنبه 03 اسفند 1390, 12:56 عصر
الان مثلا دستورات htaccess هم که گذاشتید جلوی همه چیز رو نمیگیرن.
مثلا بجای تگ script اگر تگ object بود چی؟
با تگ object طرف میتونه فایلهای swf و چیزهای دیگری رو در صفحات شما درج کنه.
یا مثلا با تگ img میتونه تصویر درج کنه.
این دستورات حتی همون حملات با تگ script رو هم فکر نمیکنم بتونه در تمام شکلها و ترفندها و باگهایی که براش هست جلوگیری کنه. این مسائل خیلی پیچیده تر از این حرفا هستن که صرفا با فیلتر کردن یک شکل خاص و ساده فکر کنید مشکل رفع شده.
برنامه هایی مثل htmlpurifier بیخودی اونقدر پیچیده و حجیم نیستن. خیلی جزییات و شکلها و تگها و باگها وجود دارن که باید جلوشون گرفته بشه.

بنابراین بنظر بنده در کد و با روشهای کامل و دقیق کار کنید. چون امکانات و برنامه های موجود در این زمینه رو یا اصلا نمیشه یا به این راحتی نمیشه در htaccess بدست آورد.

idocsidocs
چهارشنبه 03 اسفند 1390, 13:55 عصر
بنابراین بنظر بنده در کد و با روشهای کامل و دقیق کار کنید. چون امکانات و برنامه های موجود در این زمینه رو یا اصلا نمیشه یا به این راحتی نمیشه در htaccess بدست آورد.
همه مواردی که گفتید رو استفاده می کنم.
فقط همین مورد که باقی مونده و باید توی htaccess ّکار ببرم.

dragontools
چهارشنبه 03 اسفند 1390, 21:37 عصر
این روش قابل اجراست اما استفاده از این روش درست نیست چون امکان نفوذ بازهم وجود داره. بهترین روش همون چک کردن نوع کوئری است.

idocsidocs
چهارشنبه 03 اسفند 1390, 21:49 عصر
دوستان همه مطالبی که گفتید رو الان انجام می دم. فقط همین روش رو استفاده نکردم.

لطفا بگید که چطور می شه این کار رو کرد؟

الان من کد زیر رو توی لینک گذاشتم ولی صفحه 404 نمایش داده نمی شه. لطفا بگید مشکل از کجاست؟

http://localhost/photo.php?src=/admin<script>5555555555</script>
کد htaccess


RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteRule ^(.*)$ router.php?id=404 [F,L]

رضا قربانی
پنج شنبه 04 اسفند 1390, 13:25 عصر
توی اچ تی اکسس به این صورت گفتید router.php?id ولی موقع آدرس دهی به یک صفحه دیگه آدرس دادید با آدرس گت متفاوت photo.php?src

idocsidocs
پنج شنبه 04 اسفند 1390, 16:39 عصر
توی اچ تی اکسس به این صورت گفتید router.php?id ولی موقع آدرس دهی به یک صفحه دیگه آدرس دادید با آدرس گت متفاوت photo.php?src

در صورتیکه تگ اسکریپت مشهاده بشه htaccess باید کاربر رو به router.php?id که همون صفحه 404 هست بفرسته.

هنوز دلیل اصلی مشکل رو پیدا نکردم.