PDA

View Full Version : تحلیل کد



mr.zenith
شنبه 15 مرداد 1390, 22:56 عصر
سلام
دوستان کمک می کنید این کد ها را تحلیل کنم
متوجه میشم چیه ولی دقیق درکش نمی کنم

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
echo $theValue;

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
?>
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
$_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['user'])) {
$loginUsername=$_POST['user'];
$password=$_POST['pass'];
$MM_fldUserAuthorization = "";
$MM_redirectLoginSuccess = "dir.php";
$MM_redirectLoginFailed = "retry.php";
$MM_redirecttoReferrer = false;
mysql_select_db($database_cn, $cn);

$LoginRS__query=sprintf("SELECT `user`, pass FROM login WHERE `user`=%s AND pass=%s",
GetSQLValueString($loginUsername, "-1"), GetSQLValueString($password, "text"));

$LoginRS = mysql_query($LoginRS__query, $cn) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser) {
$loginStrGroup = "";

//declare two session variables and assign them
$_SESSION['MM_Username'] = $loginUsername;
$_SESSION['MM_UserGroup'] = $loginStrGroup;

if (isset($_SESSION['PrevUrl']) && false) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
}
?>
ممنون

alismith
یک شنبه 16 مرداد 1390, 02:55 صبح
سلام

چیزی که من متوجه شدم :

این تابع get_magic_quotes_gpc() اگر فعال بود اطلاعات stripslashes میشن یعنی تابع مذکور فکر کنم خودش عمل addslashes رو انجام میداد که ما اینجوری این عمل رو خنثی می کنیم

و با function_exists بررسی می کنیم که تابع مورد نظر وجود داره یا نه

تابع GetSQLValueString هم وظیفه داره تا مقادیر ارسالی را مطابق با نوع آنها از فیلترهای مربوطه عبور بده مثلا:

استفاده از mysql_real_escape_string در صورت وجود ، در غیر این صورت mysql_escape_string

در صورت اینکه مقدار پاس داده شده رشته باشد به آن quote اضافه می کند و موارد دیگر که در ساختار switch case مورد بررسی قرار میگیره

و اما تابع sprintf() اینجا شما به وسیله s% دارید مقادیری که در پارامتر دوم و سوم می نویسید رو به query ارسال می کنید
مثل استفاده از bindValue یا bindParam در asp.net یا PDO

متغییر ها که از اسم و مقادیرشون راحت میشه فهمید کارشون چیه و کلا مثل همون سوال LOGIN شما عمل می کنند :چشمک:


موفق باشید

mr.zenith
یک شنبه 16 مرداد 1390, 14:26 عصر
ممنون درسته برای login استفاده میشه اما مشکل اینجا است که بعد از وارد کردن اطلاعات میگه
unkown username in where cluse
که username در واقع اطلاعات وارد شده هست