PDA

View Full Version : صفر کردن Sql Injection با MySql



engmmrj
جمعه 17 خرداد 1392, 20:53 عصر
من یک روش تو سایت های خارجی دیدم که با MySql باگ sqlinjection رو صفر می کردند به طوری که نحوه query فرق میکرد و نوشته که سرعت ، امنیت و بازدهی سایت هم بیشتر میشود .
لطفا نحوه کار این کارو شرح دهید .

sh.n.n786
شنبه 18 خرداد 1392, 00:25 صبح
درود و ...
خوب مگه تو سایت های خارجی روشش رو ندیدی پس چیو شرح بدند ؟ oO
نوشتن کوئری های چند بخشی ( من بهش میگم ) به این صورته که شما همه اطلاعاتو سلکت نمیکنی ...
کوئری معمولی :


SELECT * FROM `name` WHERE 1 , ...

کوئری چند بخشی :


SELECT `test`, `test1` FROM `name` WHERE 1 , ...

که البته این شرط امنیت نیست پس اشبتاه متوجه نشید .... خوب باز هم اشتباه متوجه شدید چون 90% متوجه نشدند که اشتباه اول غلط بود :لبخند:
بگذریم ...
کوئری کمک چندانی به امنیت sql نمیکنه پس باید از نسخه های آپدیت شده استفاده کنید که از Injection Type ها جلوگیری میکنه در ضمن سبک کد نویسی هم مهمه چون شما اصلا نباید مستقیم ورودی رو وارد کوئری کنید در مورد سرعت هم نظر من اینه :
برای اینکه سرعت افزایش پیدا کنه به جای اینکه string بدید به کوئری از integer استفاده کنید البته سرعت select در رکورد های بالای 100000 رکود رو متونید به ثانیه مقایسه کنید
موفق باشید

engmmrj
شنبه 18 خرداد 1392, 01:43 صبح
درود و ...
خوب مگه تو سایت های خارجی روشش رو ندیدی پس چیو شرح بدند ؟ oO
نوشتن کوئری های چند بخشی ( من بهش میگم ) به این صورته که شما همه اطلاعاتو سلکت نمیکنی ...
کوئری معمولی :


SELECT * FROM `name` WHERE 1 , ...

کوئری چند بخشی :


SELECT `test`, `test1` FROM `name` WHERE 1 , ...

که البته این شرط امنیت نیست پس اشبتاه متوجه نشید .... خوب باز هم اشتباه متوجه شدید چون 90% متوجه نشدند که اشتباه اول غلط بود :لبخند:
بگذریم ...
کوئری کمک چندانی به امنیت sql نمیکنه پس باید از نسخه های آپدیت شده استفاده کنید که از Injection Type ها جلوگیری میکنه در ضمن سبک کد نویسی هم مهمه چون شما اصلا نباید مستقیم ورودی رو وارد کوئری کنید در مورد سرعت هم نظر من اینه :
برای اینکه سرعت افزایش پیدا کنه به جای اینکه string بدید به کوئری از integer استفاده کنید البته سرعت select در رکورد های بالای 100000 رکود رو متونید به ثانیه مقایسه کنید
موفق باشید
این کاری که من میگم با mysql انجام میشد و امنیت کامل داشت .

Unique
شنبه 18 خرداد 1392, 02:36 صبح
برای sql injection بهترین راه استفاده از Parametrized Query ها و Stored Procedure ها هستش. من بعید میدونم خود MySQL بتونه مانع بشه ! با pdo و mysqli خیای راحت میتونید Parametrized Query بنویسید.

Nima0711
شنبه 18 خرداد 1392, 22:16 عصر
احتملاً به جای mysql از mysqli استفاده شده همانطور که دوست قبلی اشاره کردن از pdo استفاده شده.

engmmrj
یک شنبه 19 خرداد 1392, 11:47 صبح
خودم میدونم mysqli و pdo چیه نمیخواد به من بگی !
میگم با mysql انجام داده !

com.mohsen
یک شنبه 19 خرداد 1392, 14:49 عصر
با stored procedure

engmmrj
یک شنبه 19 خرداد 1392, 19:20 عصر
با stored procedure
مخففش SP میشه ؟
میشه بیشتر توشح بدین ؟