PDA

View Full Version : امنیت title لینک



ravand
پنج شنبه 21 آبان 1394, 10:07 صبح
سلام
من امروز با یه موضوعی برخورد کردم.
ببینید من دستورم رو اینطوری نوشته بودم:


$urll=htmlentities($rowso['url'], ENT_QUOTES, "UTF-8");
$urli=urldecode($urll);
echo '<li class="soto-url"><a href="'.$urll.'" title="'.$urli.'" target="_blank">'.$urlo.'</a></li>';

فهمیدم روش بالا مشکل امنیتی داره.
اونم برای این دستور:

title="'.$urli.'"
روش زیر صحیح است:

$urll=$rowso['url'];
$urli=urldecode($urll);
$urli=htmlentities($urli, ENT_QUOTES, "UTF-8");
echo '<li class="soto-url"><a href="'.$urll.'" title="'.$urli.'" target="_blank">'.$urlo.'</a></li>';

نظرتون چیه؟
البته فعلاً بحث من سر title="" هست. نه چیز دیگه. چون داره اطلاعات رو از دیتابیس میگیره.

us1234
پنج شنبه 21 آبان 1394, 16:15 عصر
$rowso توسط چه کسی مقدر دهی میشه ؟ اگر کاربر، خوب چرا قبل از ذخیره شدن از نظر xss و injection چک نشده ؟

تابع htmlentities را میشود تحت یک شرایط خیلی خاص دور زد !

همیشه از ترکیب چند تابع بخصوص این توابع استفاده کنید :


$string = filter_var($string, FILTER_SANITIZE_STRING);
$string = trim($string);
$string = stripslashes($string);
$string = strip_tags($string);

ravand
پنج شنبه 21 آبان 1394, 18:07 عصر
من فکر میکنم همین
htmlentities هم کافیه . این پیشنهادی که دادی و گفتید قبل از ذخیره شدن از تابع htmlentities استفاده کنم پیشنهاد خوبیه.
ولی بازم فکر میکنید باید حتما از اون توابع هم استفاده کرد؟
شما اون توابع رو امتحان کردید؟

us1234
پنج شنبه 21 آبان 1394, 21:08 عصر
من بجز توابع بالا از کلی فیلتر دیگه هم استفاده میکنم :) بخصوص بحث xxs خیلی حساس است .

در خصوص bypass کردن تک تک توابع سرچ کنید تا ببنید php در ورژن های مختلف و روی سیستم های عامل مختلف چه دسته گلهایی به آب میده ...

ravand
جمعه 22 آبان 1394, 06:58 صبح
من بجز توابع بالا از کلی فیلتر دیگه هم استفاده میکنم :) بخصوص بحث xxs خیلی حساس است .

در خصوص bypass کردن تک تک توابع سرچ کنید تا ببنید php در ورژن های مختلف و روی سیستم های عامل مختلف چه دسته گلهایی به آب میده ...
از str_replace استفاده کنم بهتر از این همه تابع نیست؟ اینطوری برنامه هام پیچ در پیچ میشه. فکر میکنم سرعت اجراشم میاد پایین.
نمیشه کدهای جاوا اسکریپت رو در محدوده ای غیرفعال کنیم؟ مثلا داخل همین تابع دستورات جاوا اسکریپت هم غیرفعال بشه که کسی نتونه با xss کار کنه؟

us1234
جمعه 22 آبان 1394, 16:17 عصر
از str_replace استفاده کنم بهتر از این همه تابع نیست؟ اینطوری برنامه هام پیچ در پیچ میشه. فکر میکنم سرعت اجراشم میاد پایین.
نمیشه کدهای جاوا اسکریپت رو در محدوده ای غیرفعال کنیم؟ مثلا داخل همین تابع دستورات جاوا اسکریپت هم غیرفعال بشه که کسی نتونه با xss کار کنه؟

xxs فقط برای جاوا اسکریپت نیست . مثلا نمایش یک فرم که توسط کاربر درست شده هم خطرناک است .
هکر لینک حذف مطلب را در header redirect meta کد html شما قرار میدهد ، مثلا وقتی صفحه را باز کردید مطلب با آی دی فلان حذف میشود :D

در کل باید تمام تگ های html به char code ها تبدیل شود .
تمام کوتیشن ، دابل کوتیشن ها و ... باید به کد تبدیل شود.مثالا " باید در سورس صفحه
&#-34; (- اضافه است )باشد و الی آخر

به نظر شما ریپلیس کردن کل این کد ها صحیح تره یا استفاده از توابعی که به همین هدف تولید شده ؟

0xEHSAN
یک شنبه 20 دی 1394, 10:03 صبح
سلام
من امروز با یه موضوعی برخورد کردم.
ببینید من دستورم رو اینطوری نوشته بودم:


$urll=htmlentities($rowso['url'], ENT_QUOTES, "UTF-8");
$urli=urldecode($urll);
echo '<li class="soto-url"><a href="'.$urll.'" title="'.$urli.'" target="_blank">'.$urlo.'</a></li>';

فهمیدم روش بالا مشکل امنیتی داره.
اونم برای این دستور:

title="'.$urli.'"
روش زیر صحیح است:

$urll=$rowso['url'];
$urli=urldecode($urll);
$urli=htmlentities($urli, ENT_QUOTES, "UTF-8");
echo '<li class="soto-url"><a href="'.$urll.'" title="'.$urli.'" target="_blank">'.$urlo.'</a></li>';

نظرتون چیه؟
البته فعلاً بحث من سر title="" هست. نه چیز دیگه. چون داره اطلاعات رو از دیتابیس میگیره.

تشکر یک چیز جدید یاد گرفتم ولی بدبختی شروع شد اینو چجوری patch کنیم


$rowso توسط چه کسی مقدر دهی میشه ؟ اگر کاربر، خوب چرا قبل از ذخیره شدن از نظر xss و injection چک نشده ؟

تابع htmlentities را میشود تحت یک شرایط خیلی خاص دور زد !

همیشه از ترکیب چند تابع بخصوص این توابع استفاده کنید :


$string = filter_var($string, FILTER_SANITIZE_STRING);
$string = trim($string);
$string = stripslashes($string);
$string = strip_tags($string);


درود اینو هم امتحان کردم متاسفانه جواب نداد



اینم کد من




$urll="http://barnamenevis.org/showthread.php?512179-%22%3E%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%2 2%74%65%73%74%22%29%3C%2F%73%63%72%69%70%74%3E";$urll=htmlspecialchars($urll);$urll=htmlentities( $urll);$urll = filter_var($urll,FILTER_SANITIZE_STRING);$urll = trim($urll);$urll = stripslashes($urll);$urll = strip_tags($urll);$urli=urldecode($urll); echo '<li class="soto-url"><a href="'.$urll.'" title="'.$urli.'" target="_blank">test</a></li>';

0xEHSAN
یک شنبه 20 دی 1394, 10:06 صبح
از str_replace استفاده کنم بهتر از این همه تابع نیست؟ اینطوری برنامه هام پیچ در پیچ میشه. فکر میکنم سرعت اجراشم میاد پایین.
نمیشه کدهای جاوا اسکریپت رو در محدوده ای غیرفعال کنیم؟ مثلا داخل همین تابع دستورات جاوا اسکریپت هم غیرفعال بشه که کسی نتونه با xss کار کنه؟


از هر راهی میتونید استفاده کنید ولی تنها به این موارد اکتفا نکنید

kb0y667
شنبه 19 تیر 1395, 02:55 صبح
نکته :
عادت کنید همیشه در php بجای

$a="test";
از

$a='test';
استفاده کنید




جواب :
شما زیادی موضوع رو پیچیده و ترسناک کردید

* رشته نهایی که قراره در بخش title استفاده بشه ، فرق میکنه با بخش href و نباید یکسان باشند



به این صورت عمل کنید :


$URL='http://barnamenevis.org/showthread.php?512179-%22%3E%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%2 2%74%65%73%74%22%29%3C%2F%73%63%72%69%70%74%3E';

$URL=htmlspecialchars( stripslashes(trim($URL)));

echo '<li><a href="'.rawurlencode($URL).'" title="'.$URL.'">test</a></li>';

اگه کسی تونست دورش بزنه ، یا حمله ای انجام بده
من رگ گردنمو میزنم


خوبه ؟