PDA

View Full Version : .:: باگ گیری این کد php ::.



amir_azizi
چهارشنبه 01 مرداد 1393, 23:43 عصر
سلام دوستان

خسته نباشید

بنده در قسمت کاربران چت رومم یک قسمت برای جستجو کاربر قرار دادم.

کد بصورت زیر می باشد :



<?php
if (isset($_POST['search'])){
$posted_name = trim($_POST['search']);
$result2 = mysql_query("SELECT * FROM db1_etchat_user where etchat_username = '$posted_name' and etchat_userprivilegien != 'gast' order by emtiyaz desc");
$num_rows = mysql_num_rows($result2);
if ($num_rows > 0){
echo '
<table cellspacing="0">
<tr>
<th>مدت زمان حضور</th>
<th>امتیــاز</th>
<th>درجــه</th>
<th>نــام کـاربر</th>
<th>رتبه</th>
</tr>';
$ss = 0;
while($row = mysql_fetch_array($result2))
{
$ss = $ss +1;
$time = $row['emtiyaz'];
$usrmode = $row['etchat_userprivilegien'];

if ($usrmode=="user"){
$usrpic = "img/user_i.png";
}elseif ($usrmode=="user2"){
$usrpic = "img/user2_i.png";
}elseif ($usrmode=="user3"){
$usrpic = "img/user3_i.png";
}elseif ($usrmode=="user4"){
$usrpic = "img/user4_i.png";
}elseif ($usrmode=="parast"){
$usrpic = "img/parast_i.png";
}elseif ($usrmode=="mod"){
$usrpic = "img/mod_i.png";
}elseif ($usrmode=="moaven"){
$usrpic = "img/mymoaven.png";
}elseif ($usrmode=="admin"){
$usrpic = "img/admin_i.png";
}
echo '
<tr>
<td> دقیقه '.$time.'</td>
<td>'.$time.'</td>
<td><img border="0" src="'.$usrpic.'"></td>
<td>'.$row['etchat_username'].'</td>
<td>'.$ss.'</td>
</tr>' ;
echo'</table>';
}
}else{
echo '
<br />
<div style="font-family:tahoma;font-size:8pt;text-align: center">
<span style="color:red">کـاربری با این نام یافت نشد </span>
</div>
';
}



}
?>


حالا یک سری آدم بیکار میان و کد زیر را در کارد سرچ وارد می کنن و رمز کاربرارو بدست میارن.


' union select 1,2,3,4,5,6,7,8,9,10,group_concat(etchat_username, 0x3a,etchat_userpw),12,13,14,15,16,17 from db1_etchat_user where etchat_userprivilegien='admin'-- and 'x'='x


دوستان عزیز ممنون میشم کمکم کنن.
با تشکر

مهرداد سیف زاده
پنج شنبه 02 مرداد 1393, 04:01 صبح
دوست عزیز این باگ نیست بلکه شما دارید sql injection میشید
برای رهایی از این مشکل توصیه میکنم از pdo یا mysqli استفاده کنید
و اگر هم قصد تغییر ندارید برای جلوگیری از این هک از دستور mysql_real_escape_string برای ارسال داده به mysql استفاده کنید. الان قسمت گرفتن مقدار و ارسال به Mysql رو بصورت زیر ویرایش کنید

$posted_name = mysql_real_escape_string(trim($_POST['search']));

لینک زیر اطلاعات بیشتری در این مورد در اختیارتون میزاره
http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php

Saeed.Programmer
پنج شنبه 02 مرداد 1393, 04:31 صبح
با سلام

می تونی از کدی که برات زمیمه کردم استفاده کنی.

با تشکر

amir_azizi
پنج شنبه 02 مرداد 1393, 18:44 عصر
دوست عزیز این باگ نیست بلکه شما دارید sql injection میشید
برای رهایی از این مشکل توصیه میکنم از pdo یا mysqli استفاده کنید
و اگر هم قصد تغییر ندارید برای جلوگیری از این هک از دستور mysql_real_escape_string برای ارسال داده به mysql استفاده کنید. الان قسمت گرفتن مقدار و ارسال به Mysql رو بصورت زیر ویرایش کنید

$posted_name = mysql_real_escape_string(trim($_POST['search']));

لینک زیر اطلاعات بیشتری در این مورد در اختیارتون میزاره
http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php


بی نهایت سپاس گذارم با اون کد مشکلم حل شد.