PDA

View Full Version : کمک برای استفاده از htmlpurifier



mamali-mohammad
یک شنبه 27 شهریور 1390, 19:52 عصر
سلام
من برای ارسال پست جدید در سایتی که نوشتم از htmlpurifier استفاده می کنم ( برای جلوگیری از XSS )
زمانی که پستی ارسال می کنم اگه ستاره دار باشه متن رو خراب می کنه
مثلا *سلام* رو به */سلام*/ تبدیل می کنه
برای حل این مشکل اومدم هنگام ذخیره در دیتابیس تابع stripslashes رو گذاشتم
حالا مشکل قبلی حل شده اما مشکل جدید اینجاست که لینک دادن به متن یا عکس از کار افتاده مثلا
مثلا لینک میدم yourname.com تبدیل به / میشه
ممون میشم راهنمایی کنید

A B C D
یک شنبه 27 شهریور 1390, 21:26 عصر
یه کد مثال و دیتای کامل بذار.

mamali-mohammad
یک شنبه 27 شهریور 1390, 22:32 عصر
این کد ورودی به دیتابیس متنی که در ادیتور نوشته میشه :

require_once 'htmlpurifier-4.3.0/library/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('Core.Encoding', 'UTF-8');
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
$purifier = new HTMLPurifier($config);

$text=$_POST['text'];
$text = $purifier->purify($text);
$text=mysql_real_escape_string($text);
$text=stripslashes($text);

حالا در ادیتور مینویسیم سلام و لینک میدیم : سلام (http://salam.com)
اما این خروجیشه : سلام (http:///)

idocsidocs
دوشنبه 28 شهریور 1390, 01:43 صبح
منم همین مشکلات رو دارم. همچنین می خوام بدونم که چطور می شه به تگهای object و embed اجازه اجرا داد. لطفا با کد توضیح بدید.

الان همه تگها حذف می شن و فقط متن ساده از فیلتر عبور می کنه.

راهس نیست که بشه بجای حذف کاراکترهای مخرب، اونها رو به مجودیتهای معادل تبدیل کرد؟

mamali-mohammad
دوشنبه 28 شهریور 1390, 16:35 عصر
چه کنیم به نظرتون ؟

A B C D
دوشنبه 28 شهریور 1390, 17:47 عصر
این کد ورودی به دیتابیس متنی که در ادیتور نوشته میشه :

require_once 'htmlpurifier-4.3.0/library/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('Core.Encoding', 'UTF-8');
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
$purifier = new HTMLPurifier($config);

$text=$_POST['text'];
$text = $purifier->purify($text);
$text=mysql_real_escape_string($text);
$text=stripslashes($text);

حالا در ادیتور مینویسیم سلام و لینک میدیم : سلام (http://salam.com)
اما این خروجیشه : سلام (http:///)
این خط رو:

if(get_magic_quotes_gpc()) $text=stripcslashes($text);
قبل از $text = $purifier->purify($text); اضافه کنید.

ضمنا اون خط آخر برای چیه؟ چون اثر خط قبل از خودش (mysql_real_escape_string) رو خنثی میکنه.

A B C D
دوشنبه 28 شهریور 1390, 17:59 عصر
منم همین مشکلات رو دارم. همچنین می خوام بدونم که چطور می شه به تگهای object و embed اجازه اجرا داد. لطفا با کد توضیح بدید.

الان همه تگها حذف می شن و فقط متن ساده از فیلتر عبور می کنه.

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

شما میخوای چکار کنی دقیقا؟
میخوای بذاری کاربر هر فلشی رو بتونه توی صفحهء شما بذاره؟
اینطور که دیگه امنیت برقرار نمیشه. ارتباطی هم به موجودیت و این حرفا نداره.

یه راه دیگه که بنظرم میرسه اینه که فلش پلیر روی سایت خود شما باشه و کاربران فایلهای ویدئوی خودشون رو روی سایت شما آپلود کنن یا لینکشون رو بدن. گزینهء آپلود نیاز به ترافیک و پهنای باند کافی داره و ضمنا احتمالا نیاز به مبدل فایلهای ویدئویی استاندارد به flv یا یه فرمت دیگری که فلش ساپورت میکنه هم داری.
روش لینک دادن هم یعنی اینکه کاربر فایل flv رو جای دیگه آپلود کرده و لینکش رو با فرمت خاصی در ادیتور تایپ میکنه و بعد شما بعد از انجام عملیات HTMLPurifier و غیره میای و اون رشته های کاربر با فرمت مورد نظر رو شناسایی میکنی و با تگهای object مخصوص فلش پلیر سایت خودت عوض میکنی. البته شاید بشه برای این کار یه دکمه ای هم به ادیتور اضافه کرد که بصورت ویژوال این کار انجام بشه.

idocsidocs
سه شنبه 29 شهریور 1390, 00:32 صبح
یه راه دیگه که بنظرم میرسه اینه که فلش پلیر روی سایت خود شما باشه و کاربران فایلهای ویدئوی خودشون رو روی سایت شما آپلود کنن یا لینکشون رو بدن. گزینهء آپلود نیاز به ترافیک و پهنای باند کافی داره و ضمنا احتمالا نیاز به مبدل فایلهای ویدئویی استاندارد به flv یا یه فرمت دیگری که فلش ساپورت میکنه هم داری.من می خوام یه فرم طراحی کنم که مدیر سایت بتونه سایتهای مورد اعتماد رو از طریق فرم وارد کنه.
سوالی که دارم اینه که فقط باید آدرس سایت رو قرار بدم یا باید آدرس لینکهای جانبی رو هم بذارم جز آدرسهای مورد اعتماد؟

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

A B C D
سه شنبه 29 شهریور 1390, 08:51 صبح
من می خوام یه فرم طراحی کنم که مدیر سایت بتونه سایتهای مورد اعتماد رو از طریق فرم وارد کنه.
سوالی که دارم اینه که فقط باید آدرس سایت رو قرار بدم یا باید آدرس لینکهای جانبی رو هم بذارم جز آدرسهای مورد اعتماد؟

منظورت اینه مثلا سایتهای دیگری مثل یوتیوب رو هم بعنوان سایت مورد اعتماد معرفی کنه که کاربران بتونن لینک به ویدئوهای اون سایتها رو توی صفحه درج کنن که مستقیما در صفحه نمایش داده بشه؟


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

idocsidocs
سه شنبه 29 شهریور 1390, 12:16 عصر
منظورت اینه مثلا سایتهای دیگری مثل یوتیوب رو هم بعنوان سایت مورد اعتماد معرفی کنه که کاربران بتونن لینک به ویدئوهای اون سایتها رو توی صفحه درج کنن که مستقیما در صفحه نمایش داده بشه؟منظورم همینه.

نمیدونم والا باید رفتم خونه یه تست بزنم ببینم قضیه چیه. اگه این مشکل حل نشه، استفاده از این کلاس بی معنیه.

A B C D
سه شنبه 29 شهریور 1390, 16:22 عصر
فقط باید آدرس سایت رو قرار بدم یا باید آدرس لینکهای جانبی رو هم بذارم جز آدرسهای مورد اعتماد؟
اگر اون منبع و مثالی رو که قبلا معرفی کردم بخونی خودت میفهمی.


اگه این مشکل حل نشه، استفاده از این کلاس بی معنیه.
کلاس؟ چه کلاسی؟ بنظرم مربوط به ادیتور میشه.
مثلا موقعی که از ورد توی ادیتور برنامه نویس پیست میکنم فرمت حفظ میشه، ولی درمورد ckeditor اینطور نیست.

idocsidocs
سه شنبه 29 شهریور 1390, 16:42 عصر
مثلا موقعی که از ورد توی ادیتور برنامه نویس پیست میکنم فرمت حفظ میشه، ولی درمورد ckeditor اینطور نیست.
یعنی هیچ راهی نیت که این مشکل رو برای ادیتور تینی برطرف کرد؟

mamali-mohammad
پنج شنبه 31 شهریور 1390, 17:26 عصر
ممنون
مشکل حل شد
آخرین موردی که برام سوال مونده :
یه متن رو بنویسم و مثلا سایز 6 بدم بهش ذخیره میشه و روی ادیتور همون سایز هست .
اما هنگام نمایش در سایز سایز معمولیه :

مثلا در ادیتور : سلام
نمایش در سایت : سلام

idocsidocs
پنج شنبه 31 شهریور 1390, 17:44 عصر
ممنون
مشکل حل شد
آخرین موردی که برام سوال مونده :
یه متن رو بنویسم و مثلا سایز 6 بدم بهش ذخیره میشه و روی ادیتور همون سایز هست .
اما هنگام نمایش در سایز سایز معمولیه :

مثلا در ادیتور : سلام
نمایش در سایت : سلام
یه توضیحی بدید و بگید که چه کارهایی انجام می دید؟

این کلاس یه مشکل اساسی داره و اونم اینکه وقتی توی ورد یه مطلب می نویسد و این مطلب رو توی ادیتور کپی می کنید، همه تگها از بین می رن.

شما با این مشکل مواجه شدید؟

mamali-mohammad
پنج شنبه 31 شهریور 1390, 21:00 عصر
آره
الان مشکل اینجاست که استایل head و size رو از بین میبره

idocsidocs
پنج شنبه 31 شهریور 1390, 22:42 عصر
آره
الان مشکل اینجاست که استایل head و size رو از بین میبره
امکانش هست کدهایی که برای راه انداختن این کلاس استفاده می کنید رو اینجا قرار بدید تا من هم استفاده کنم؟

mamali-mohammad
جمعه 01 مهر 1390, 12:11 عصر
خدمت شما :

require_once 'htmlpurifier-4.3.0/library/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('Core.Encoding', 'UTF-8');
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
$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);

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

idocsidocs
جمعه 01 مهر 1390, 14:19 عصر
با این کد مشکل بولد شدن ، رنگ شدن و لینک دادن حل شده
اما مشکل تغییر سایز هنوز هست
این کد رو خود من هم استفاده می کنم.

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

مشکل بعدی این کد اینه که کش کردن رو غیر فعال نکرده، ممکنه بعضی از اطلاعات مهمت رو که نباید بدن تایید هویت نمایش داده بشن از طریق این کد وارد فایل کش بشه و هکر از طریق فایلهای کش این اطلاعات رو بدست بیاره.

مسئله بعدی اینه که اگه از نرم افزار ورد یه متن رو استایل بدی و توی ادیتور tinymce کپی کنی، ممکنه متن از بین بره. برای حل این مشکل چیکار کردی؟

mamali-mohammad
جمعه 01 مهر 1390, 16:23 عصر
سلام
اون استایل که از ورد کپی میکنی و استایل از بین میره مربوط به htmpurifier نیست
مربوط به css شماست

idocsidocs
جمعه 01 مهر 1390, 17:14 عصر
اون استایل که از ورد کپی میکنی و استایل از بین میره مربوط به htmpurifier نیست
مربوط به css شماست
چطور باید این مشکل رو برطرف کنم؟ من برای ادیتور یه فایل سی اس اس ساده استفاده می کنم . فقط دیرکشن و ونت رو مشخص می کنم.

برای بقیه موارد چه کاری می کنید؟

mamali-mohammad
جمعه 01 مهر 1390, 17:31 عصر
ببین داداش
شما برای استارت کار اومدی این کد رو دادی :

* {
font:normal 11px tahoma;
}

این کد بالاتر از span و font قرار میگیره
در نتیجه زمانی شما استایل میدی ادیتور میاد استایل رو به span میده
مثلا :

<span style="font-size:24pt;line-height:115%;font-family:Arial, 'sans-serif';" lang="fa">hello</span>

اما دوباره استایل * میاد اینو ناقص میکنه
متوجه شدی ؟

idocsidocs
جمعه 01 مهر 1390, 18:57 عصر
متوجه شدی ؟ تست می کنم و نتیجه رو می گم.

در مورد بقیه مسائل چیزی نگفتید.

mamali-mohammad
جمعه 01 مهر 1390, 20:24 عصر
برای فلش من تست نکردم
فکر کنم بتونی یه لیست سفید برای اینکار بزاری

idocsidocs
جمعه 01 مهر 1390, 22:58 عصر
این مطلب یادتون نره:

مشکل بعدی این کد اینه که کش کردن رو غیر فعال نکرده، ممکنه بعضی از اطلاعات مهمت رو که نباید بدن تایید هویت نمایش داده بشن از طریق این کد وارد فایل کش بشه و هکر از طریق فایلهای کش این اطلاعات رو بدست بیاره.

mamali-mohammad
شنبه 02 مهر 1390, 00:47 صبح
خب شما این مورد رو از کجا مطمئنی ؟
از این کلاس سایت های بزرگی استفاده می کنن

idocsidocs
شنبه 02 مهر 1390, 02:16 صبح
خب شما این مورد رو از کجا مطمئنی ؟
از این کلاس سایت های بزرگی استفاده می کنن توی سایت ارائه دهنده کلاس نوشته.

من صفحاتش رو خوندم و این مطلب توش نوشته بود.

mamali-mohammad
شنبه 02 مهر 1390, 11:46 صبح
خب راهی برای حلش نزاشته ؟
شاید شما بد برداشت کردی
وگرنه ماست فروش نمیگه ماست من ترشه که :لبخند:

idocsidocs
شنبه 02 مهر 1390, 12:38 عصر
خب راهی برای حلش نزاشته ؟
شاید شما بد برداشت کردی
وگرنه ماست فروش نمیگه ماست من ترشه که :لبخند:
عزیز من مستنداتش رو بخون. مکنه از خودم درنیاوردم: تنظیماتی که من استفاده می کنم:


$config = HTMLPurifier_Config::createDefault();
//$config->set('Core.Encoding', 'ISO-8859-1'); // replace with your encoding
//$config->set('HTML.Doctype', 'HTML 4.01 Transitional'); // replace with your doctype
$config->set('Cache.DefinitionImpl', null);
//$config->set('Core.DefinitionCache', null);
$purifier = new HTMLPurifier($config);

mamali-mohammad
شنبه 02 مهر 1390, 15:00 عصر
خب شما برای حل این مشکل چه راهی پیشنهاد میدی ؟

idocsidocs
شنبه 02 مهر 1390, 15:16 عصر
خب شما برای حل این مشکل چه راهی پیشنهاد میدی ؟


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

mamali-mohammad
شنبه 02 مهر 1390, 18:39 عصر
ممنون
پس با این حساب دیگه نباید مشکلی با این کلاس داشته باشیم
فقط میمونه مشکل فایل فلش

idocsidocs
شنبه 02 مهر 1390, 19:22 عصر
فقط میمونه مشکل فایل فلش
من برای فایل فلش هنوز تنظیم خاصی استفاده نکردم و فایل فلش غیر فعال هست.

ولی می خوام تنظیمات این کلاس رو طوری انجام بدم که به فلشهای سایت یوتوب و سایت اصلی که ادیتور روش نصب می شه اجازه اجرا بده.

اگر چنین تنظیماتی انجام دادید لطفا کدهای تست شده رو توی این تاپک قرار بدید.