#أمن_المعلومات
#امن_سيبراني
السلام عليكم
اليوم جبت لكم موضوع حمايه في الويب تمام
وراح اتكلم كيف تحولون SQL الى prepare statments
Insert, Select and Delete
#امن_سيبراني
السلام عليكم
اليوم جبت لكم موضوع حمايه في الويب تمام
وراح اتكلم كيف تحولون SQL الى prepare statments
Insert, Select and Delete
- Insert:
في الويب لما تجي تكتب Insert بشكل طبيعي زي كذا
$sql = $mysql->query("Insert into tablename (id, name, address) values ( $ID, $name, $Address);
كذا بيكون عرضه الاختراق او Sql injection
كل الى عليك تحولها بطريقه ذي بحيث تحمي بارميتر
يتبع
في الويب لما تجي تكتب Insert بشكل طبيعي زي كذا
$sql = $mysql->query("Insert into tablename (id, name, address) values ( $ID, $name, $Address);
كذا بيكون عرضه الاختراق او Sql injection
كل الى عليك تحولها بطريقه ذي بحيث تحمي بارميتر
يتبع
بكل مره احد يكتب بالبراميتر SQL بيستجيب لو كتبت هذي طريقة.
عشان تحميها حولها الى كذا
$st = $mysqli->prepare("Insert into tablename (id,name,address") values(?,?,?);
$st->bind_param('iss', $dbid, $dbname, $dbAddress);
$dbid = $ID
$dbname = $name
$dbAddress = $Address
$st->execute
عشان تحميها حولها الى كذا
$st = $mysqli->prepare("Insert into tablename (id,name,address") values(?,?,?);
$st->bind_param('iss', $dbid, $dbname, $dbAddress);
$dbid = $ID
$dbname = $name
$dbAddress = $Address
$st->execute
هذي طريقه تكون أمنة بأذن الله
كل الى عملناه اننا كتبنا prepare نكتب SQL نفسها بس بعد القيمة نحط علامة استفهام
بحيث اي احد يحاول يستخدم مدخلات بالبارميتر او اين كان ماراح يتسجيب له
ثم في Bind_pram كتبنا ثلاث احرف مثلآ
الاي دي هو i يعني انتجر
s يعني سترينج
الادرس والاسم.
كل الى عملناه اننا كتبنا prepare نكتب SQL نفسها بس بعد القيمة نحط علامة استفهام
بحيث اي احد يحاول يستخدم مدخلات بالبارميتر او اين كان ماراح يتسجيب له
ثم في Bind_pram كتبنا ثلاث احرف مثلآ
الاي دي هو i يعني انتجر
s يعني سترينج
الادرس والاسم.
-Select:
في طريقتين واحد طرق مايحتاج تستخدم bind بسبب عدم وجود علامة استفهام.
اول طريقه لما تبي تحدد الشرط مثلآ زي كذا
$sql = $mysqli->query("select * from table name where id = $id");
هنا في prepare statement نحتاج نحط bind_param
مثل كذا يتبع...
في طريقتين واحد طرق مايحتاج تستخدم bind بسبب عدم وجود علامة استفهام.
اول طريقه لما تبي تحدد الشرط مثلآ زي كذا
$sql = $mysqli->query("select * from table name where id = $id");
هنا في prepare statement نحتاج نحط bind_param
مثل كذا يتبع...
$st = $mysqli->prepare("select * from tablename where id = ?");
$st->bind_param('i',$DBid);
$DB = $id;
$st->execute();
تلاحظ معي هنا استخدمنا bind من اجل رقم ID لانه اي شي بعد where لازم نستخدم bind_param
$st->bind_param('i',$DBid);
$DB = $id;
$st->execute();
تلاحظ معي هنا استخدمنا bind من اجل رقم ID لانه اي شي بعد where لازم نستخدم bind_param
اما طريقه ثانيه بدون where مايحتاج نحط bind_param
مثل كذا
$st = $mysqli->prepare("select * from tablename");
$st->execute();
$result = $st->get_result()->fetch_all();
قد تحتاج اخر خطوه بسبب عدم وجود bind_param
وايضآ قد تحتاج fetch_all على حسب طريقه الكود الى عندك.
مثل كذا
$st = $mysqli->prepare("select * from tablename");
$st->execute();
$result = $st->get_result()->fetch_all();
قد تحتاج اخر خطوه بسبب عدم وجود bind_param
وايضآ قد تحتاج fetch_all على حسب طريقه الكود الى عندك.
UPDATE:
تحتاج تستخدم bind مثلآ بطريقه عاديه نكتبها كذا
$st = $mysqli->query("Update tablename set id = $id, name= $namd, phone = $phone where id = $id");
واكيد بيكون عرضه للخطر لانه كذا مصاب بالثغره SQL injection
كل الي علينا نعمل هكذا
تحتاج تستخدم bind مثلآ بطريقه عاديه نكتبها كذا
$st = $mysqli->query("Update tablename set id = $id, name= $namd, phone = $phone where id = $id");
واكيد بيكون عرضه للخطر لانه كذا مصاب بالثغره SQL injection
كل الي علينا نعمل هكذا
$st = $mysqli->prepare("Update tablename set id = ?, name = ?, phone = ?, where id = ?");
$st->bind_param('isii', $dbid, $dbname, $dbphone, $dbid);
$dbid = $id;
$dbname = $namd;
$dbphone = $phone,
$dbid = $db;
$st->execute;
$result = $st->get_result();
$st->bind_param('isii', $dbid, $dbname, $dbphone, $dbid);
$dbid = $id;
$dbname = $namd;
$dbphone = $phone,
$dbid = $db;
$st->execute;
$result = $st->get_result();
هنا مانحتاج نستخدم fetch all بسبب اننا نريد نعمل تحديث للقواعد بيانات فقط.
ونجي الاخر وحده Delete
ونجي الاخر وحده Delete
ولكن نقدر نحولها الى طريقه prepare statement هكذا.
احنا نكتبها بالطريقه عاديه زي كذا
$sql = $mysqli->query("Delete from tablename where id = $id);
ولكن نقدر نحولها الى طريقه prepare statment هكذا.
احنا نكتبها بالطريقه عاديه زي كذا
$sql = $mysqli->query("Delete from tablename where id = $id);
ولكن نقدر نحولها الى طريقه prepare statment هكذا.
$st = $mysqli->prepare("Delete from tablename where id = ?");
$st->bind_param('i', $dbid);
$dbid = $id;
$st->execute();
هذي تبع delete
واكيد تحتاج where لانه لو ماستخدمته راح ينحذف كل شي بالجدول.
$st->bind_param('i', $dbid);
$dbid = $id;
$st->execute();
هذي تبع delete
واكيد تحتاج where لانه لو ماستخدمته راح ينحذف كل شي بالجدول.
و معلومة جديده Order by مايحتاج تعمل له bind_param
كذا انتهينا. ومثل مااذكركم هذي فقط فكره عامه عن Prepare statement لحمايه موقعكم عن الثغرات SQL injection
وقد تحتاج زياده او نقصان على حسب كاتبه الكود تبعك.
كذا انتهينا. ومثل مااذكركم هذي فقط فكره عامه عن Prepare statement لحمايه موقعكم عن الثغرات SQL injection
وقد تحتاج زياده او نقصان على حسب كاتبه الكود تبعك.
جاري تحميل الاقتراحات...