• 1 رای - 2 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
HTMLSpecialChars
#11
می تونی از توابع ترکیبی استفاده کنی.
خودت این تابع رو بنویس:
اینو ببین:
کد پی‌اچ‌پی:
    function clear($txt)
    {
        
$txt str_replace("<""&lt****;"$txt);
        
$txt str_replace(">""&gt****;"$txt);
        
$txt str_replace("'""&lsquo;"$txt);
        
$txt str_replace("\""""$txt);
        
$txt str_replace("-""&ndash;"$txt);
        
$txt str_replace("/""&frasl;"$txt);
        
$txt trim($txt);
        return 
$txt;
    } 

فقط تو دو خط اول اون چهارتا ستاره رو حذف کن.(چون ادیتور انگار مشکل داره. وقتی کد رو می زنم کاراکتر رو وارد می کنه)
همه جوره اش رو داریم ظاهرن
  پاسخ
تشکر شده توسط : scooter
#12
درود و ممنون از جوابتون ولی
معذرت می خوام ولی من هنوز جواب سوالم رو نگرفتم .
  پاسخ
تشکر شده توسط :
#13
ببینید بستگی داره.
آیا کاربر می تونی html وارد کنه یا نه؟ اگر نه که دیگه نباید از یک ادیتور استفاده کنید و html special کنید
اگر می تونند استفاده کنند جهت حذف برخی از موارد برای حمله xss ورودی رو با کلاسی که معرفی کردم فیلتر کنید
  پاسخ
تشکر شده توسط : scooter
#14
چرا این صفحه در جستجو های من مشاهده نشد؟؟؟؟
ببینید من درست میگم؟Blush
من فایل های پی اچ پی و اچ تی ام ال رو جدا کردم پس اول فاکشن رو به فایل پی اچ پی اضافه میکنم
کد پی‌اچ‌پی:
function unhtmlspecialchars$string )
{
  
$string str_replace '&amp;''&'$string );
  
$string str_replace ''''\''$string );
  
$string str_replace '&quot;''"'$string );
  
$string str_replace '&lt;''<'$string );
  
$string str_replace '&gt;''>'$string );
   
  return 
$string;

و بعد این رو به فورمم در اچ تی ام ال اضافه میکنم
فقط نمیدونم وقتی میخواد نمایش بده تبدیل کنم یا موقعی که میخواد ذخیره بشه مثلا موقع نمایش اگر بخواد تغییر پیدا کنه باید به این صورت در بیاد؟
کد:
<div class=header_small style="float:left; margin-top:20px; margin-bottom:5px; text-align:right; direction:rtl;"><a href="{url_main}blogs_full.php?id={id}" class="pri_little_bold">.unhtmlspecialchars("{subject}").</a></div>
و یا موقعی که میخواد ذخیره بشه به این صورت تبدیل بشه!؟
کد:
<tr><td height="40" valign="top" align="right" width="80">{l_subject}:&nbsp; </td><td valign="top"><input type="text" name="subject" value="" style="width: 396px;"></td></tr>
اصلا میشه در موقع ذخیره اون رو تبدیل کرد؟Confused
یا فقط موقع نمایش باید تغییرش داد
مشه با یه مثال بگید تا من بفهمم؟Huh
چه چیزی به پی اچ پی اضافه بشه و چه چیزی به اچ تی ام ال
من فایلها رو جدا کردم Big Grin
ما همیشه نیازمند دانستنیم و علم هیچکس کامل نیست.Angel
و بیسوادترین ما آنهایی هستند که تصور میکنند همه چیز میدانند و بی نیاز هستند از علم دیگران و به این مغرور میشوند (نهج البلاغه)Heart
  پاسخ
تشکر شده توسط :
#15
خوب به قول وحید اگه قراره که کاربر کاراکتر های html رو هم بتونه وارد کنه، خوب بهتره از یه ادیتور استفاده کنی

این ادیتورها کاری که می کنن اینه که تگهای html رو به صورت کد ارسال می کنن.

بنابراین نگران هک شدن از این طریق نخواهید بود.

اما مثلا برای یه بخشی مثل گرفتن نام کاربری و کلمه عبور اصلا قرار نیست کاربر مثلا از کاراکتر - یا " استفاده کنه.

بنابراین می تونید خیلی راحت با یه str_replace کارتو راه بندازی
همه جوره اش رو داریم ظاهرن
  پاسخ
تشکر شده توسط : cyraxgroup
#16
بزارید من یه بار بهتر بگم
دو حالت داریم
1- کاربر نمی تونه و قرار نیست که html وارد کنه
خوب برای اینکار قبل از ذخیره در پایگاه داده اون ها رو یاد با تابع htmlspecialchars کاراکترها رو تبدیل می کنیم یا با استفاده از strip_tags تگها رو به کل حذف کنیم
2- کاربر می تونه و قراره html وارد کنه
اینجا یه مقدار خطر ناک میشه
باز هم برای این دو حالت دارم.
اولیش این هست که کاربر فقط می تونه تعداد محدودی تگ رو استفاده کنه. مثلا br یا تگ b یا ... . پس بهتره بریم سراغ bbcode . (در مورد bbcode می خوایید توضیخ بدم تاپیک باز کنید توضیح میدم)
دومیش این هست تعداد تگها زیاد هست . خوب اینجا کاربر از یک ادیتور استفاده می کنه. حالا می خواییم جلوی حملات xss رو از این طریق بگیریم که باید به ترفندهایی جلوی کدهای مخرب xss رو گرفت که پیشنهاد می کنم از کلاس http://www.phpclasses.org/browse/package/2189.html استفاده کنید
  پاسخ
تشکر شده توسط : cyraxgroup
#17
ببینید ادیتور ها جاوا هستند کاربر نمیتونه اونها رو غیر فعال کنه؟
در ضمن اگر مقدار هایی مثل> یا < به کارکترهای اچ تی ام ال تبدیل بشن بازم براشون فرق میکنه که چی بینشون قرار داره؟
من فکر کنم وقتی اینها به این صورت نمایش داده میشن &gt**** دیگه مهم نیست چی بینشون باشه چون مرورگر اون رو یک text میدونه نه؟
من در فرم هام کاربران میتونن هر چیزی رو وارد کنن و این خیلی خطرناکه!
هم در input ها و هم در textarea ها کاربر میتونه حتی کد نویسی کنه! خیلی جالبه نه؟
حالا اگر من از یک ادیتور جاوا استفاده کنم مشکلم حل میشه اما تا زمانی که جاوا در مرورگر فعال باشه درسته؟
یعنی اگر جاوا غیر فعال باشه! ادیتور هم کار نمیکنه و من شکست خوردم
ولی وقتی داریم از پی اچ پی برای این کار استفاده میکنیم این چیزها دیگه فرقی نداره
من فقط نمیدونم هنگام نمایش اطلاعات باید اونها رو تبدیل کنم؟ یا وقت ذخیره شدن اونها، روشی که ادیتور های جاوا استفاده میکنن. اونها موقع ذخیره تگ ها رو تغییر میدن فکر کنم نه؟
اگه جایی اشتباه کردم راهنماییم کنید
ما همیشه نیازمند دانستنیم و علم هیچکس کامل نیست.Angel
و بیسوادترین ما آنهایی هستند که تصور میکنند همه چیز میدانند و بی نیاز هستند از علم دیگران و به این مغرور میشوند (نهج البلاغه)Heart
  پاسخ
تشکر شده توسط :
#18
من یک فاکشن پیدا کردم
کد پی‌اچ‌پی:
function htmlspecialchars($str)
{
    
$str preg_replace('/&(?!#[0-9]+;)/s''&'$str);
    
$str str_replace(array('<''>''"'), array('&lt;''&gt;''&quot;'), $str);

    return 
$str;

و میخوام این رو فیلتر کنم
کد پی‌اچ‌پی:
$this->m_field['subject'] = array("subject"null); 
حالا باید چه جوری تغییرش بدم؟
این تغییر درسته؟
کد پی‌اچ‌پی:
$this->m_field['subject'] = str_replace(array("subject"null)); 
ما همیشه نیازمند دانستنیم و علم هیچکس کامل نیست.Angel
و بیسوادترین ما آنهایی هستند که تصور میکنند همه چیز میدانند و بی نیاز هستند از علم دیگران و به این مغرور میشوند (نهج البلاغه)Heart
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان