PDA

View Full Version : امنیت کد



abdorreza
پنج شنبه 10 اردیبهشت 1394, 16:05 عصر
سلام

من تازه PDO رو شروع کردم. این کد امنه ؟



$dbh = new PDO("mysql:host=$hostname; dbname=bookstore; charset=UTF8", $username, $password);
echo 'Connected to database';
$sql = "INSERT INTO users (username, email, password, age) VALUES (:user, :eml, :pass, :ag)";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(":user"=>$_POST['username'],":eml"=>$_POST['email'],":pass"=>$_POST['password'],":ag"=>$_POST['age']));
$dbh = null;


و میخواستم بدونم آیا متغیر هایی که در فرم وارد میشوند مانند password در فرم لاگین باید قبل از شرکت در دستور SELECT چه عمیاتی روشون انجام بگیره تا امن بشن. در کد بالا قبل از اینکه متغیر ها به دستور INSERT اضافه بشوند دستور prepare استفاده شده. آیا این از نظر امنیتی درسته ؟
ممنونم

omidabedi
جمعه 11 اردیبهشت 1394, 10:11 صبح
کدتون از لحاظ امنیتی مشکلی نداره و درست است

omidabedi
جمعه 11 اردیبهشت 1394, 10:21 صبح
فقط توی PDO یادتون باشه همیشه
PDO به خودی خود نمیاد یک query رو safe کنه و تنها متغییرهایی که به تابع execute یا bind میدید رو escape میکنه
پس هیچ وقت فکر نکنید و انتظار نداشته باشید که query ای که از قبل ساخته شده و متغییرهاش درونش جایگذاری شده هر چند هم که prepare کنید امن هست

مثل این:


$query = "SELECT * FROM users WHERE username='$username' AND password='$password' ";
$prepared = $dbc->prepare($query); //از قبل داده ها درون query مقدار دهی شدن
$prepared->execute();


این الان باگ داره
حتما باید متغییرهای $username و $password یا بصورت ارایه به execute داده بشن یا bindParam بشن که باگ امنیتی برطرف بشه

abdorreza
یک شنبه 13 اردیبهشت 1394, 15:36 عصر
خیلی ممنونم از دوستان

من همیشه متغیرها رو مانند مثالی که نوشتم با : و بصورت پارامتری به به SQL ارسال میکنم