من برای امنیت از تابع htmlentities استفاده می کنم. یکی از دوستان گفت که این تابع ممکنه بعضی از کاراکترهای فارسی رو خراب کنه.
ایا این موضوع صحت داره؟ برای حل این مشکل باید چیکار کرد؟
من برای امنیت از تابع htmlentities استفاده می کنم. یکی از دوستان گفت که این تابع ممکنه بعضی از کاراکترهای فارسی رو خراب کنه.
ایا این موضوع صحت داره؟ برای حل این مشکل باید چیکار کرد؟
اين كد رو ببين دو تا خروجي بهت ميده . يه بار مقدار علي رو با utf-8 نوشتم و يه بارم بدون utf-8
<?php
$str = "علي";
echo htmlentities($str, ENT_QUOTES, "UTF-8");
echo "<br>";
echo htmlentities($str);
?>
خروجي :
علي
ع��
کار این htmlentities چی هست؟
تا حالا در موردش نشنیده بودم
ببين چجوري ازش استفاده شده يه سرچي در موردش بزن:
$name=htmlentities($_POST['name']);
$title=htmlentities($_POST['title']);
اونطور که شنیدم وقتی توی این تابع از utf-8 هم استفاده کنیم بازم ممکنه با بعضی کاراکترهای فارسی مشکل پیدا کنه.اين كد رو ببين دو تا خروجي بهت ميده . يه بار مقدار علي رو با utf-8 نوشتم و يه بارم بدون utf-8
چيزي نيست دادا . مگه ما چند تا كاراكتر فارسي داريم؟ همه رو امتحان كن ببين مشكل پيدا ميكنه يا نه؟
سایر دوستان نظری ندارن؟
htmlentities و htmlspecialchars برای برقراری امنیت از واجبات کد نویسی هستند و هیچ مشکلی با فارسی ندارند به شرطی که با UTF-8 Encoding استفاده بشوند.
با توجه به این نکته منم هرجا کوچکترین نکته امنیتی وجود داشته باشه از این دوتابع استفاده می کنم. آیا با استفاده از این توابع می تونیم خیال خودمون رو راحت کنیم و نگران امنیت رشته های ورودی نباشیم؟htmlentities و htmlspecialchars برای برقراری امنیت از واجبات کد نویسی هستند و هیچ مشکلی با فارسی ندارند به شرطی که با UTF-8 Encoding استفاده بشوند.
من فکر کنم شما منظور من را بد فهمیدین ! منظور من امنیت در زمان نمایش بود نه در زمان ذخیره در دیتابیس ! htmlentities و htmlspecialchars امنیت کاملی برای درج اطلاعات در Database به وجود نمیارن ، شما باید escape کنی رشته ها را یا با PDO به صورت parameterized کار کنی تا امنیت درج اطلاعات انجام بشه ! برای نمایش هست که باید از htmlentities و htmlspecialchars استفاده کنین که xss و غیره براتون مشکل ساز نشه !
به نظرم هنگام ذخیره از این کد استفاده کن :
$title=mysql_real_escape_string($_POST['title']);
$title=htmlspecialchars($title, ENT_QUOTES);
هنگام نمایش هم مستقیم از دیتابیس بکش بیرون
برای text و ادیتور هم بهتره از HTMLPurifier استفاده کنی
اینم دستوراتش :
require_once 'htmlpurifier-4.3.0/library/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('Cache.DefinitionImpl', null);
$purifier = new HTMLPurifier($config);
$text=$_POST['text'];
if(get_magic_quotes_gpc())
$text=stripcslashes($text);
$text = $purifier->purify($text);
$text=mysql_real_escape_string($text);
من از استفاده می کنم و تا الان مشکلی نداشتم
من هم دقیقا همین کار رو می کنم.به نظرم هنگام ذخیره از این کد استفاده کن :
برای ادیتورها از این کلاس استفاده می کنم. اما یه سوال:برای text و ادیتور هم بهتره از HTMLPurifier استفاده کنی
چطور می تونم توی HTMLPurifier کاری کنم که بغیر از یوتوب بشه فایلهای چند رسانه ای از سایر سرورها اجازه عبور از فیلتر داشته باشن؟
توی خود سایت HTMLPurifier آموزش داده چطوری لیست سیاه و سفید ایجاد کنی
من چند روز قبل طبق همون انجام دادم ولی ارور داد !توی خود سایت HTMLPurifier آموزش داده چطوری لیست سیاه و سفید ایجاد کنی
می شه یه نمونه کد بهم بدید؟
والله من تاحالا دنبال لیست سیاهش نبودم
اگه یاد گرفتم میزارم کدش رو
لیست سفیدش چطور؟والله من تاحالا دنبال لیست سیاهش نبودم
اینو به کدت اضافه کن :
$config->set('Filter.YouTube', false);
این کد رو الان استفاده می کنم. اما فرض کنید که بخوام چندتا وب سایت رو جز لیست سفید قرار بدم تا فایلهای چند رسانه ای این وب سایتها اجازه عبور از فیلتر رو داشته باشن.اینو به کدت اضافه کن :
برای بقیه وب سایتها باید چیکار کنم؟
اینو من برای لیست سیاه دادم
من هم این مشکل رو دارم
اما در این کد که متن فارسی در پیامک ارسال شده بصورت D6%H8% در میاد
<recipient mobile="'.$to.'" originator="'.$from.'" doerid="8" >'.htmlentities($text).'</recipient>
لطفا منو مستفیض نمایید
آخرین ویرایش به وسیله m_mili_k : یک شنبه 07 مرداد 1397 در 22:42 عصر
خودم حلش کردم
<recipient mobile="'.$to.'" originator="'.$from.'" doerid="8" >'.urldecode($text).'</recipient>