PDA

View Full Version : سوال: نمایش کامل کامنت‌های خطرناک بدون تغییر



Amir4317
چهارشنبه 08 مهر 1394, 19:18 عصر
سلام به همه دوستان!

من برنامه نویس سی‌شارپ هستم و آشنایی نسبی با پی ایچ پی دارم، برای یک پروژه‌ی ساده در قسمت دریافت فیدبک ها از این زبان استفاده کردم.

روش کارم به این صورته که از طریق متد پست متن رو دریافت می کنه و در یک صفحه HTML ساده همه‌ی اونها رو ذخیره و به من نشون میده
یعنی اصلاً خبری از بانک اطلاعات و این چیزا نیست و مستقیماً در ادامه فایل با دستور fwrite نوشته میشه.

حالا میخواستم یکم امنیت بهش بدم طوری که کاربر هردستور مخربی رو فرستاد بصورت سالم نشونم بده بدون اینکه اجرا بشه.
من از توابع زیر استفاده کردم که هرکدوم برای من مشکلی داشتن و باب میلم نبودن:
addslashes اسلش زیاد اضافه میکند
mysql_real_escape_string فقط برروی mysql جواب میدهد
html entities اصلاً یه وضــی! متن فارسی ناخوانای هچل هف میشه


نظرتون رو درمورد دستور clean بدید من شنیدم ولی هنوز امتحان نکردم.
اگر کلاسی دستوری چیزی هست که خوب و تمیز باشه ممنون میشم معرفی کنید و من رو راهنمایی کنید!
پیشاپیش بسیار متشکرم (و عیدتون هم مبارک!)

hamedarian2009
چهارشنبه 08 مهر 1394, 20:42 عصر
کلاس که زیاده با یک سرچ می تونید پیدا کنید اما میتونید از تابع filter_var (http://php.net/manual/en/function.filter-var.php) استفاده کنید
به این تابع به عنوان پارامتر دوم یک ثابت بهش می دهید که عمل validate یا sanitize را روی اون ورودی انجام می دهید. فهرست کاملش رو اینجا می تونید ببینید
http://php.net/manual/en/filter.filters.php

همچنین این تابع هم بدردتون میخوره http://php.net/manual/en/function.htmlspecialchars.php

Unique
پنج شنبه 09 مهر 1394, 00:18 صبح
html entities اصلاً یه وضــی! متن فارسی ناخوانای هچل هف میشه
برای بی اثر کردن هر دستور java یا html یا هر چی باید از همین تابع به شکل زیر استفاده کنید ، شاید Encoding را utf-8 نمیگذارین که فارسی ها به مشکل میخورن.

htmlentities($str, ENT_QUOTES, "UTF-8");


کلاس که زیاده با یک سرچ می تونید پیدا کنید اما میتونید از تابع filter_var استفاده کنید
آقا حامد فکر کنم متوجه سوالشون نشدین ،‌ایشون میخوان مانع از XSS بشن. همین.

hamedarian2009
پنج شنبه 09 مهر 1394, 10:59 صبح
برای بی اثر کردن هر دستور java یا html یا هر چی باید از همین تابع به شکل زیر استفاده کنید ، شاید Encoding را utf-8 نمیگذارین که فارسی ها به مشکل میخورن.

htmlentities($str, ENT_QUOTES, "UTF-8");


آقا حامد فکر کنم متوجه سوالشون نشدین ،‌ایشون میخوان مانع از XSS بشن. همین.

خب من تابع htmlspecialchars رو هم معرفی کردم و صحبت از clean کردن هم تو سوالشون بود که تابع filter_var و ثوابت sanitize رو پیشنهاد کردم به طور مثال :

filter_var($str, FILTER_SANITIZE_STRING);

hsgpro
پنج شنبه 09 مهر 1394, 11:51 صبح
سلام
من این تابع رو از یه سایت خارجی گرفتم برای من که مشکلی نداشته و خوب کار میکرده حتی برای متون فارسی:



function test_input($text){
return trim(stripslashes(htmlspecialchars($text)));
}

Amir4317
شنبه 05 دی 1394, 23:12 عصر
سپاس فراوان از شما :قلب:
از این کد مستفیض شدم:



$note=filter_var(trim(stripslashes(htmlspecialchar s($_POST['note']))), FILTER_SANITIZE_STRING);

:چشمک: