PDA

View Full Version : سوال: چند سوال در مورد escape کردن



abolfazl-z
جمعه 21 تیر 1392, 10:55 صبح
سلام دوستان :لبخندساده:

سوال 1 :
دوستان ما باید تمام ورودی های را به کوئری اسکیپ کنیم ؟ و یا نه فقط در هنگام ثبت مقادیر ؟
مثلا ممکن ما نام جدول رو از کاربر بخواهیم خوب در این حالت باید اسکیپ کنیم ؟

سوال 2 :
چرا هنگام اسکیپ کردن کمی اسکریپت به طول می انجامد ؟(این وقت و کاراریی اسکریپت رو میگیرد)
البته نمیدونم شاید برای من اینطور باشد !

abolfazl-z
جمعه 21 تیر 1392, 20:13 عصر
کسی نبود ؟ :متفکر:

sh.n.n786
جمعه 21 تیر 1392, 20:42 عصر
درود
ببینید شما باید تمام ورودی هایی که از سمت کاربر میاد رو اسکیپ کنی و نیازی نیست که ورودی های خودتون اسکیپ بشه به جر مواردی که اطلاعات شامل در اصطلاح Injection type ها میشه ( " و ' و < و > و * و \ و ... )
و اما سرعتی که گفتین من کنجکاو شدم و انجام دادم و اختلاف زمان به این صورت بود و هیچ احساس کندی نکردم
تعداد رشته : 64 کارکتر (" و ' و حروف )
تابع : htmlentities البته real_scape چون قبلش چک میکنه ببینه به sql متصل هست یا نه یکم زمان میبره در حد 0.007
اختلاف زمان شروع و پایان به میکرو ثانیه : 0.0007
موفق باشید

abolfazl-z
جمعه 21 تیر 1392, 22:12 عصر
مواردی که اطلاعات شامل در اصطلاح Injection type ها میشه ( " و ' و < و > و * و \ و ... )
یکم واضح تر بگویید.

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

اصلا اگر کاراکتر غیر مجاز استفاده شود چی می شود ؟(خودمون وارد کنیم)


و اما سرعتی که گفتین من کنجکاو شدم
خوب من از تابع mysql_real_escape_string استفاده می کنم که درصورت استفاده اسکریپت کمی دیرتر عمل می کند.(استفاده نکنیم سرعت بی نظیر هست)

mtnam1372
جمعه 21 تیر 1392, 22:48 عصر
سلام قربونت برم
من قراره اینارو تو یه مقاله کامل بگم هی دارم کم کم اینور اونور میگم
دقت کن مثلا ما کوئری زیر رو داریم



<?php
$q="select * from TABLE where id=".$_GET['id'];
$q1=mysql_query($q);
?>


حالا اگر کار ای دی وارد کنه همه چیز درست کار میکنه اما اگر کد زیر رو وارد کنه چی؟



union select user from admin


دوتا دستور رو بهم می چسبونه و کل جدول ادمین شمارو چاپ میکنه

یا مثلا دستور دراپ رو میده و پایگاه داده شمارو پاک میکنه

اوکی؟؟

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

سوال دیگه ایم در مورد امنیت دارین؟

Unique
جمعه 21 تیر 1392, 23:44 عصر
بحث escape مخصوصا با انقراض افزونه mysql و جایگزینی با pdo و mysqli کم کم عفسیل شده و بهتره از prepared statements ها استفاده بشه. اما در مورد سوال شما فقط ورودی های کاربر که قراره توی sql query قرار بگیرند باید escape بشه ! پس قطعا هر چیز دیگه که خودتون مینویسین اهمیتی نداره !

abolfazl-z
شنبه 22 تیر 1392, 09:56 صبح
مرسی دوستان


دوتا دستور رو بهم می چسبونه و کل جدول ادمین شمارو چاپ میکنه

خوب این کار رو میشه با گذاشتن کتیشن برطرف کرد.


سوال دیگه ایم در مورد امنیت دارین؟

خوب ولی یک سوال پس اون کاراکتر های غیر مجاز چیست (%%)

mtnam1372
شنبه 22 تیر 1392, 10:29 صبح
مرسی دوستان



خوب این کار رو میشه با گذاشتن کتیشن برطرف کرد.


خوب ولی یک سوال پس اون کاراکتر های غیر مجاز چیست (%%)
درسته اما دور زدن این کار برای هکر حرفه ای راحته دقت کن که هر دستوری توی کامپیوتر چنتا جایگیزن داره
و هکر میتونه از جایگیزینش استفاده کنه توابع زیادی برای این کار هست که اون امن ترینش بود برای همینم وقت سیستم رو میگیره.توابع سبک تری هم هستند مثل

addslashes($id)
اما باید همه جوانب رو در نظر گرفت تابع mysql_real_escape_string تقربا کل جوانب رو در نظر گرفته

منظور از کارکتر های غیر مجاز همون دستورات sql هست .

navid3d_69
شنبه 22 تیر 1392, 12:06 عصر
اینجارو ببینید چندتا پست در باره sql injection قرار دادم
http://blog.sedehi.ir/

abolfazl-z
شنبه 22 تیر 1392, 12:44 عصر
درسته ولی دیگه تابع mysql_escape_string توسط سایت پی اچ پی بد دانسته شده و استفاده از آن مناسب نیست و باید از mysqli استفاده شود.

navid3d_69
شنبه 22 تیر 1392, 13:05 عصر
ببنید درسته این صحبت شما ولی شما فکر می کنید هاستینگ ها با این زودی به ورژن جدید میرن؟ بهترین راه این است که به PDO برین یا اینکه یک کلاس یکجور با mysql بنویسید و از اون استفاده کنید و بعد که PDO رو یاد گرفتین کلاس رو با PDO جایگزین کنید توی پروژهاتون ولی PDO با چند روز وقت گذاشتن کامل یاد میگیرد راحت هست

abolfazl-z
شنبه 22 تیر 1392, 13:50 عصر
کاملا راست میگین.
ولی من از mysqli استفاده می کنم.
آیا خوب هست ؟
البته تمام کار ها توسط یک کلاس انجام میشه و میتونم در صورت لزوم از PDO استفاده کنم و فقط کلاس رو تغییر بدهم.(یکی از مزایای شی گرایی همین هست دیگه)

navid3d_69
شنبه 22 تیر 1392, 13:59 عصر
کاملا راست میگین.
ولی من از mysqli استفاده می کنم.
آیا خوب هست ؟
البته تمام کار ها توسط یک کلاس انجام میشه و میتونم در صورت لزوم از PDO استفاده کنم و فقط کلاس رو تغییر بدهم.(یکی از مزایای شی گرایی همین هست دیگه)

واقعیتش من دقیق نمی دونم کدوم بهتر هست قبلا چندتا مقاله درباره اینکه PDO بهتر هست خوندم ولی نمی دونم درسته یا نه چون با mysqli کار نکردم

abolfazl-z
شنبه 22 تیر 1392, 14:04 عصر
فکر کنم این خوب باشه

http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-which-should-you-use/

Unique
یک شنبه 23 تیر 1392, 00:15 صبح
من با هر دوش کار کردم ! mysqli از pdo بفهمی نفهمی سریعتره ! اما pdo دو تا خصوصیت خیلی خوب برای من داره ! اول اینکه driver های متعددی برای database های مختلف داره و با افزایش driver ها خیلی راحت میشه بین database ها جابجا شد ! دوم اینکه Named Parametric هست ! یعنی لازم نیست پارامتر ها را ترتیبی داد میشه به صورت اسمی داد !