بالابردن امنیت ادیتورهای تحت وب هنگام غیرفعال کردن جاوااسکریپت

phpweb

Active Member
من از ادیتور tinymce استفاده می کنم. توی این ادیتور حتما باید به کاراکترهای < و > اجازه بدیم بدون مشکل وارد صفحه بشن در غیز اینصورت ادیتور به خوبی کار نمی کنه. البته اگه ادیتور فعال باشه و کاربر کاراکترهای < و > رو وارد کنه ادیتور این کاراکترها رو به معادل خودشون تبدیل می کنه.

مشکلی که دارم اینه که اگه کاربر جاوا اسکریپت رو غیرفعال کنه، ادیتور هم غیر فعال می شه و کاربر به راحتی می تونه کدهای xss وارد کنه و باعث مشکل بشه.

راهی نیست که بشه در صورت غیرفعال بودن جاوا اسکریپت جلوی این نوع حملات رو گرفت؟
 
آخرین ویرایش:
تا اونجایی که یادمه با این تگ ها میشه کاری کرد اگه جاوا اسکریپت غیر فعال باشه <noscript> کار می کنه

PHP:
<script type="javascript">
    ... construction of ajaxy-link,  setting of "js-enabled" cookie flag, etc..
</script>
<noscript>
    <a href="next_page.php?nojs=1">Next Page</a>
</noscript>
 

phpweb

Active Member
تا اونجایی که یادمه با این تگ ها میشه کاری کرد اگه جاوا اسکریپت غیر فعال باشه <noscript> کار می کنه

PHP:
<script type="javascript">
    ... Construction of ajaxy-link,  setting of "js-enabled" cookie flag, etc..
</script>
<noscript>
    <a href="next_page.php?nojs=1">next page</a>
</noscript>
اگه جاوا اسکریپت رو غیرفعال کنیم، ادیتور نمایش داده نمی شه ولی فیلدهای فرم نمایش داده می شن. کاربر می تونه فیلدها رو پر کنه و ارسال کنه.

در این حالت کاربر می تونه کاراکترهای < و > رووارد کنه و به راحتی کدهای مخرب خودش روتزریق کنه.

در این حالت باید چیکار کرد؟
 

eAmin

Well-Known Member
این غیر اصولی هست که بخواید امنیت رو فقط در سمت کاربر بالا ببرید. چون به هرحال همونطور که خودتون هم می دونید، کار زیادی از دست شما برنمیاد. شما باید حداکثر امنیت رو در سمت سرور لحاظ کنید تا اگر زمانی همونطور که گفتید کاربر JavaScript رو غیر فعال کرد، باز هم بتونید جلوی عملیات خرابکارانه رو بگیرید.
 

phpweb

Active Member
این غیر اصولی هست که بخواید امنیت رو فقط در سمت کاربر بالا ببرید. چون به هرحال همونطور که خودتون هم می دونید، کار زیادی از دست شما برنمیاد. شما باید حداکثر امنیت رو در سمت سرور لحاظ کنید تا اگر زمانی همونطور که گفتید کاربر JavaScript رو غیر فعال کرد، باز هم بتونید جلوی عملیات خرابکارانه رو بگیرید.
اگر ادیتور فعال باشه کارکترهای > < به موجودیت های معادل تبدیل می کنه.
وقتی که از ادیتورها استفاده می کنیم، مجبور هستیم که به کاراکترهای > < دست نزنیم وگرنه کدهایی که توسط ادیتور ایجاد شدن خراب می شن. به همین دلیل توی فیلدهایی که ادیتور توی انها اجرا می شه این کاراکترها رو دست نمی زنم.

حالا فرض کنید کاربر جاوا اسکریپت رو غیر فعال کنه، در نتیجه ادیتور هم اجرا نمی شه و کاراکترهای > < به معادل خودشون تبدیل نمی شن. در این شرایط کاربر می تونه یه کد مثل کد زیر رو تزریق کنه.

HTML:
<script>alert('I am A hacker');</script>
اگر جاوا اسکریپت غیرفعال باشه و کاربر چنین کدهایی تزریق کنه، ادیتوری وجود نداره که کاراکترهای >< رو به موجودیتهای معادل خودشون تبدیل کنه. در این شرایط چطور باید توی سرور جلوی این کدهای مخرب رو بگیریم؟

من تقریبا جلوی همه کدهای مخرب رو توی سرور ساید می گیرم اما بخاطر کدهای ایجاد شده توسط ادیتور به دو کاراکتر > و < دست نمی زنم.

نظر شما چیه؟
 
آخرین ویرایش:

eAmin

Well-Known Member
اگر hacker از این تگ استفاده کرد شما ی تونید در سمت سرور با php با استفاده از تابع htmlspacialchars جلوی اجرا شدن این تابع رو بگیرید.
در هرصورت شما باید ورودی رو فیــلتر کنید، حتی زمانی که دارید از ادیتور استفاده میکنید. چون حتی در زمانی که جاوااسکریپت فعال هم باشه، یک hacker حرفه ای می تونه کدهای خرابکارانه خودش رو به برنامه سمت سرور شما ارسال کنه.

همونطور که گفتم شما اطلاعات رو باید سمت سرور فیــلتر کنید، و کاراکترهای خطرناک رو جدا و کاراکترهای بی خطر رو نمایش بدید.
 

phpweb

Active Member
اگر hacker از این تگ استفاده کرد شما ی تونید در سمت سرور با php با استفاده از تابع htmlspacialchars جلوی اجرا شدن این تابع رو بگیرید.
در هرصورت شما باید ورودی رو فیــلتر کنید، حتی زمانی که دارید از ادیتور استفاده میکنید. چون حتی در زمانی که جاوااسکریپت فعال هم باشه، یک hacker حرفه ای می تونه کدهای خرابکارانه خودش رو به برنامه سمت سرور شما ارسال کنه.

همونطور که گفتم شما اطلاعات رو باید سمت سرور فیــلتر کنید، و کاراکترهای خطرناک رو جدا و کاراکترهای بی خطر رو نمایش بدید.
چیزی که به ذهنم می رسه اینه که مقدار روودی رو برای پیدا کردن کاراکترهای زیر سرچ کنم و اگر پیدا کردم به کاربر هشدار بدم.

HTML:
<s
HTML:
<S
این دوتا ابتدای تگ اسکریپت هستن و اگه جلوی این ها گرفته بشه می شه گفت که دیگه امکان تزریق تگهای اسکریپت وجود نداره.
آیا این روش ایمن و جلوی تزریق تگهای اسکریپت و XSS رو می گیره؟
 

eAmin

Well-Known Member
تگ script فقط یک مورد از حملات XSS هست و صرفا نمیشه با استفاده از روشی که گفتید جلوی حملات XSS رو گرفت، چون هکر میتونه تگ script رو لا به لای محتوای تگهای دیگه قرار بده.
 

phpweb

Active Member
تگ script فقط یک مورد از حملات XSS هست و صرفا نمیشه با استفاده از روشی که گفتید جلوی حملات XSS رو گرفت، چون هکر میتونه تگ script رو لا به لای محتوای تگهای دیگه قرار بده.
وقتی ما دنبال یه رشته مثل رشته زیر بگریدیم، هکر چطور می تونه تگهای اسکریپت رو مخفی کنه؟
کد:
<scr
البته بغیر از تگهای مربوط به اسکریپت، بلاک دستورات پی اچ پی و بقیه برنامه های سمت سرور هم هست که باید اونها رو هم بررسی کرد.
 

Milad

Well-Known Member
BB Code

از روش های مختلف میشه XSS زد ، میشه قاطی عکس ، Css و ... XSS زد . کلا Html خطرناکه حسن :green:
 
آخرین ویرایش:

phpweb

Active Member
BB Code

از روش های مختلف میشه XSS زد ، میشه قاطی عکس ، Css و ... XSS زد . کلا Html خطرناکه حسن :green:
وقتی که از ادیتور استفاده می کنم باید پای لرزش هم بشنم !

می شه در مورد این روش بیشتر توضیح بدید و بگید که چطور "میشه قاطی عکس ، Css و ... XSS زد" ؟
 

Milad

Well-Known Member
اون دیگه امنیته :دی گوگلینگ کن زیاده ...

ولی از ادیتوری استفاده کن که bbcode کار کنه نه html ، نبود هم باید سمت سرور همونجوری که ادیتورت تبدیل میکنه به معادل تبدیل کنی .
کلا دنبال امنیت سمت کاربر نباش همه چیز قبل رفتن تو db باید چک شه !
 
آخرین ویرایش:

phpweb

Active Member
اون دیگه امنیته :دی گوگلینگ کن زیاده ...

ولی از ادیتوری استفاده کن که bbcode کار کنه نه html ، نبود هم باید سمت سرور همونجوری که ادیتورت تبدیل میکنه به معادل تبدیل کنی .
کلا دنبال امنیت سمت کاربر نباش همه چیز قبل رفتن تو db باید چک شه !
لطفا به این دو مورد جواب بدید:

1-
بنظرم می رسه که توی تگهایی مثل img (و کلا تگهایی که به فایلهای خارجی لینک می دن) می شه بجای آدرس یه فایل تصویری، آدرس یه فایل js یا php رو تخصیص بدیم. در این صورت بجای نمایش تصویر، اسکریپت بار گذاری و اجرا می شه. این مطلب درسته؟

2- کار bbcode اینه که کاراکترهای < و > رو قبل از وارد شدن به دیتابیس به [ ] تبدیل می کنه.
حل این مشکل کاری نداره، یه تابع می نویسم و این کاراکترها رو جابجا می کنیم !

آیا bbcode فقط امنیت سمت دیتابیس رو تامین می کنه یا اینکه امنیت رو برای موردی هم که در قسمت بالا توضیح دادم تامین می کنه؟
 

Milad

Well-Known Member
1 . خیر
2 . برعکس گفتید تو ادیتور های BBCode تگ های [] آزاد هستند و همه تگهای دیگه بسته میشند و موقع وارد شدن به db تگ bbcode مورد نظر به معادل html تبدیل میشه . در نتیجه کاربر نمیتونه هیچگونه کد Html ای تزریق کنه جز چندتا bbcode که خودمون تعریف میکنیم مثل img bold italic url یا ...
 

phpweb

Active Member
1 . خیر
2 . برعکس گفتید تو ادیتور های BBCode تگ های [] آزاد هستند و همه تگهای دیگه بسته میشند و موقع وارد شدن به db تگ bbcode مورد نظر به معادل html تبدیل میشه . در نتیجه کاربر نمیتونه هیچگونه کد Html ای تزریق کنه جز چندتا bbcode که خودمون تعریف میکنیم مثل img bold italic url یا ...
عجب نابغه ای هستم ها !:wink:

من هنوز متوجه هدف استفاده از bbcode نشدم.
طبق گفته شما ادیتور با تگهای ][ کار می کنه، فرض کنید متن یه مقاله رو با ادیتور نوشتیم و توی دیتابیس ذخیره کردیم. حالا بازدیدکننده بخواد مقاله رو بخونه، در این صورت توی صفحه باید از تگهای ][ استفاده کنیم، در صورتیکه دیگه ادیتوری وجود نداره تا متوجه این تگها بشه و تبدیلشون کنه !

یه سرچ کلی تری می کنم ببینم چی می شه.
 

Milad

Well-Known Member
ادیتور های BBcode کارشون تبدیل کارکتر نیست و فقط شکل دهی متن رو انجام میدند .

فرضا شما مینویسید : Milad و سلکتش میکنید سپس رو Bold کلیک میکنید ، وظیفه ادیتور این هست که میلاد رو تبدیل کنه به [ b ] milad [ / b ].
اگر دقت کرده باشید خیلی از سایت ها ادیتور ندارند اما کنار textarea مینویسند BBCode فعال یعنی کاربر میتونه دستی وارد کنه [ b ] milad [ / b ]و این کد موقع پردازش در سمت سرور به معادل Html تبدیل و بعد در دیتابیس ذخیره میشه !

[ b ] milad [ / b ] رو با فاصله گذاشتم که تبدیل نشه .
 

phpweb

Active Member
ادیتور های BBcode کارشون تبدیل کارکتر نیست و فقط شکل دهی متن رو انجام میدند .

فرضا شما مینویسید : Milad و سلکتش میکنید سپس رو Bold کلیک میکنید ، وظیفه ادیتور این هست که میلاد رو تبدیل کنه به [ b ] milad [ / b ].
اگر دقت کرده باشید خیلی از سایت ها ادیتور ندارند اما کنار textarea مینویسند BBCode فعال یعنی کاربر میتونه دستی وارد کنه [ b ] milad [ / b ]و این کد موقع پردازش در سمت سرور به معادل Html تبدیل و بعد در دیتابیس ذخیره میشه !

[ b ] milad [ / b ] رو با فاصله گذاشتم که تبدیل نشه .
من الان توی ادیتور tiny پلاگین BBcode رو فعال کردم. با این وجود فقط بعضی تگها رو به صورت [ b ] milad [ / b ] نمایش می ده.

آیا راهی هست که بشه کاری کرد که توی این ادیتور همه تگها به صورت BBcode تبدیل بشن؟
 
آخرین ویرایش:

Milad

Well-Known Member
از اینا استفاده کنید کارتون رو راه میندازن بگردید بهتر هم پیدا میکنید :
کد:
http://corpocrat.com/2008/08/15/free-wysiwyg-bbcode-editor-in-javascript/
http://markitup.jaysalvat.com/home/
http://wysiwygbbcode.codeplex.com/
http://www.shajul.net/software/wysiwyg-bbcode-editor/
http://www.tinymce.com/tryit/bbcode.php
 

phpweb

Active Member
از اینا استفاده کنید کارتون رو راه میندازن بگردید بهتر هم پیدا میکنید :
کد:
http://corpocrat.com/2008/08/15/free-wysiwyg-bbcode-editor-in-javascript/
http://markitup.jaysalvat.com/home/
http://wysiwygbbcode.codeplex.com/
http://www.shajul.net/software/wysiwyg-bbcode-editor/
http://www.tinymce.com/tryit/bbcode.php
من الان دارم از روی صفحه زیر کار می کنم.
کد:
http://www.tinymce.com/tryit/bbcode.php
مشکلی که دارم اینه که فقط بعضی از تگها رو به bbcode تبدیل می کنه. نمی دونید توی tinymce چطور می شه همه تگها رو به bbcode تبدیل کرد؟
 

جدیدترین ارسال ها

بالا