PDA

View Full Version : استفاده از کد های HTML در نظرات کاربران



2undercover
چهارشنبه 20 دی 1391, 15:44 عصر
سلام...

همون طور که از عنوان معلومه می خوام اجازه استفاده از تگ های خاصی رو مثل p و br وimg رو به کاربرا بدم ولی کاربر نتونه از تگ های غیر مجاز مثل script و ... استفاده کنه !

خوب من باید در این مورد هنگام درج در پایگاه داده چی کار کنم؟!

$ M 3 H R D A D $
چهارشنبه 20 دی 1391, 15:55 عصر
strip_tag
این تابع و جستجو کن
حتی میتونی بهش بگی چه تگ هایی و حذف نکنه
کار اصلیش لخت کردن متن از هرگونه html هست

siavashsay
چهارشنبه 20 دی 1391, 17:40 عصر
از توابعی مثل htmlspecialchars و یا htmlentities هم میتونی به راحتی استفاده کنی !

2undercover
چهارشنبه 20 دی 1391, 18:52 عصر
از توابعی مثل htmlspecialchars و یا htmlentities هم میتونی به راحتی استفاده کنی !

ممنون اینو می دونستم ! ولی با استفاده از این دو تا کل تگ ها حذف میشن وبه صورت متن در میان !

siavashsay
چهارشنبه 20 دی 1391, 19:32 عصر
والله واسه ما که اینطور نیست !
این صفحه رو تست کنید !


<?php
if(isset($_POST['sub'])){
$txt=$_POST['txt'];
$txt1=stripslashes(htmlentities($txt));
$txt2=stripslashes(htmlspecialchars($txt));
echo $txt1."<br/>".$txt2;
}
?>
<form name="form1" method="post" action="">
<p>
<label for="txt"></label>
<input type="text" name="txt" id="txt">
</p>
<p>
<input type="submit" name="sub" id="sub" value="Submit">
</p>
</form>


وقتی این کد رو
<script> alert("hi"); </script> رو وارد کردم این رو نمایش داد
<script> alert("hi"); </script>
<script> alert("hi"); </script>

Unique
پنج شنبه 21 دی 1391, 03:17 صبح
htmlentities و htmlspecialchars میان و کاراکتر هایی مثل < و " و ... را به معادل html اونها تغییر میدهند ! اینجوری بدون خطر xss شما اونها را نمایش میدین ، مشکل دوستمون فکر نمیکنم این باشه ! ایشون میخوان tag های خطرناک مثل script و iframe و اینها را حذف کنند ! مشکل strip_tags که آقا مهرداد گفتن اینه که متن بین تگ ها را پاک نمیکنه و یک جورایی دردسر میشه توی بعضی از سناریو ها ! این تابع خوبیه برای blacklist و white list با حذف کل تگ :


function strip_tags_content($text, $tags = '', $invert = FALSE) {

preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags);
$tags = array_unique($tags[1]);

if(is_array($tags) AND count($tags) > 0) {
if($invert == FALSE) {
return preg_replace('@<(?!(?:'. implode('|', $tags) .')\b)(\w+)\b.*?>.*?</\1>@si', '', $text);
}
else {
return preg_replace('@<('. implode('|', $tags) .')\b.*?>.*?</\1>@si', '', $text);
}
}
elseif($invert == FALSE) {
return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text);
}
return $text;
}

2undercover
پنج شنبه 21 دی 1391, 06:50 صبح
والله واسه ما که اینطور نیست !
این صفحه رو تست کنید !


<?php
if(isset($_POST['sub'])){
$txt=$_POST['txt'];
$txt1=stripslashes(htmlentities($txt));
$txt2=stripslashes(htmlspecialchars($txt));
echo $txt1."<br/>".$txt2;
}
?>
<form name="form1" method="post" action="">
<p>
<label for="txt"></label>
<input type="text" name="txt" id="txt">
</p>
<p>
<input type="submit" name="sub" id="sub" value="Submit">
</p>
</form>


وقتی این کد رو
<script> alert("hi"); </script> رو وارد کردم این رو نمایش داد
<script> alert("hi"); </script>
<script> alert("hi"); </script>

درسته حالا شما این رو وارد کن:
<p>سلام<p>

اگه اینو وارد کنید این رو به صورت متن بهتون نمایش میده یعنی می نویسی <p>سلام</p> و نمیره سر خط!
ممنون از کاربر (چون نمی دونم خانم/آقا هستن!) Unique !

eshpilen
پنج شنبه 21 دی 1391, 09:48 صبح
http://www.hamidreza-mz.tk/?p=730

eshpilen
پنج شنبه 21 دی 1391, 11:29 صبح
دقت کنید در اون مقاله در سایتم چی گفتم:

هرگز از راههای کم و بیش ساده و مختصر شخصی برای این کار استفاده نکنید، چون ساختار HTML بیش از اونکه شما فکر کنید پیچیده و درهم است و امکان نفوذ رو از طرق متعدد و پیچیده ای میده، و با توجه به تحقیقات و تست و تحلیل هایی که شخصا روی این قضیه داشتم میتونم بگم روشهایی که برنامه نویسان خودشون ابداع میکنن هیچکدام امنیت کافی در برابر تمام ترفندهای نفوذ ندارن.من اون موقع در این مورد، یعنی اینکه بعضی قسمتهای HTML رو اجازه بدیم و بعضیا/خطرناکها/بقیش رو اجازه ندیم، تحقیق کردم و مطالب و توضیحات و مستنداتی در این مورد خوندم که احتمالا هیچکدام از شما ندیدید! چون اگر دیده بودید و فهمیده بودید، از روشهای ساده و مختصر چه خودتون طراحی کنید و چه از جای دیگری کپی کنید استفاده نمیکردید.
HTML/JS خیلی نکته و حفره داره و نسخه های مختلف مرورگرهای مختلف هم باگهای خاصی دارن که طبیعی هست شما ازشون خبر ندارید.
کسانی که برنامه هایی مثل htmlpurifier رو توسعه دادن/میدن مسلما روی این موارد تحقیق گسترده ای داشتن و اونا رو در برنامشون لحاظ کردن و طبیعتا درصورتی که هنوزم در کار توسعه فعال باشن اون رو مدام بر اساس امکانات و باگهای جدید آپدیت میکنن در نسخه های جدیدش.

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

حالا یک مورد خیلی ساده و واضح عملی هم بگم از مواردی که احتمالا در کدهای شما درنظر گرفته نشده:

<p onmouseover="alert('xss')">
الان ببینید کد شما این موارد رو درنظر گرفته (نه اینکه شانسی حذفش کنه) و فیلتر میکنه یا نه. اصلا خودتون به ذهنتون رسیده بود خدایی؟
تازه این ساده ترین و واضح ترین مورد بود؛ باگهای مرورگرهای مختلف هم که به کنار!
یعنی حتی اگر کدتون این مورد رو درنظر گرفته این به تنهایی بازم به هیچ وجه دلیل نمیشه که کامل و حرفه ای باشه و بهش اعتماد کنید.
فقط میخواستم بگم مسائل امنیتی گسترده و پیچیده هستن و همینطور بدون تحقیق و تخصص و اطمینان کار نکنید، و حتی الامکان از منابع و برنامه های تخصصی استفاده کنید و کمک بگیرید. البته تحقیق و پیدا کردن منابع و برنامه های حرفه ای هم خیلی وقتها کار آسونی و کار هرکسی نیست، و طبیعتا فضای اینترنت پره از منابع و برنامه ها و نمونه کدهای فریبندهء ناقص و ضعیف و اشتباه.

Unique
پنج شنبه 21 دی 1391, 17:15 عصر
راستش من نمیدونم دوستمون کجا میخواستند از این تکنیک استفاده کنند ، اما بهتره اصلا به کاربران عمومی سایت اجازه وارد کردن tag ها را برای eval کردن توی صفحات ندین یا از سیستم های ابتکاری که بعدا توسط خود شما معادل به Html میشه استفاده بشه . یا بیاین از همون htmlpurifier استفاده کنین اما بازم هم تضمین کننده نیست و ممکنه تا بیان bug fix بگذارند و شما هم به روز کنین براتون درسر پیش بیاد ! کلا باید دید سناریو ایشون چیه و کجا میخوان این کار را انجام بدهند. اما یه نکته دیگه هم اینکه کسی نمیتونه ادعا کنه همه خطرات را پوشش داده و سایتش بی مشکل هست مخصوصا توی کار های بزرگ بهترین ها هم سوتی میدهند ! کاربران تازه کاری مثل من هم که جای خود دارند.

$ M 3 H R D A D $
یک شنبه 11 فروردین 1392, 18:00 عصر
htmlpurifier
میشه بیشتر در مورد این موضوع توضیح و مثال بزنید دوستان ؟

Unique
یک شنبه 11 فروردین 1392, 18:56 عصر
توضیح نمیخواد توی سایتش (http://htmlpurifier.org/) demo داره کامل هم توضیح داده