PDA

View Full Version : سوال: وجود حفره در اسكريپت



ravand
سه شنبه 02 خرداد 1391, 18:47 عصر
هر كاري كردم بلكه بتونم حفره اي كه در اين اسكريپت وجود داره رو از بين برم و جلوش رو بگيرم نشد.
ممنون ميشم راهنماييم كنيد.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php include_once('title.php'); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
A{ text-decoration: none; }
#matlab{
width:477px;
direction:rtl;
text-align:right;
border-radius:3px;
padding:2px 0px;
border:1px #CCCCCC solid;
font-size:20px;
border:1px silver solid;
padding:10px 15px;
min-height:50px;
background-color:#F7F7F7;
shadow:1px 1px #ccc;
margin-top:10px;
border-radius:5px;
behavior: url('PIE.htc');
}

#matlab:hover
{
background-color:#EEEEEE;
}
</style>
</head>
<body>
<div align="center">
<div id="matlab">
<?php
header("Cache-Control: no-cache, must-revalidate");

if((!isset($_GET["id"])) or ($_GET["id"]=="") or (!is_numeric($_GET["id"]))){
header("Location:HTTP/1.0 404 Not Found");
die("");
exit;
}else{
$sql =$_GET['id'];
if(is_numeric($sql) and strlen($sql)<5){
$servername="localhost";
$dbname="database";
$user="root";
$pass="";
$dblink=mysql_connect($servername,$user,$pass);
mysql_select_db($dbname,$dblink);
date_default_timezone_set('Asia/Tehran');
include('jdf.php');
mysql_query("SET CHARACTER SET utf8",$dblink);

function escape($sql) {
$symbol = array(',', ')', '(', "'", '"','!', '?', '/', '[', ']', '+', '=', '#', '\x00','\x7F','\xC0','\xFD', '\n', '\r','\t', '\x1a', '&', '$', 'select', 'delete', 'from', 'xml', 'script', 'union','order','by','select','all','group','havin g');
$sql= preg_replace("/<.*?>/", "",htmlentities($sql));
$sql =str_replace($symbol,"",$sql);
$sql = trim($sql);
$sql = strip_tags($sql);
if(!get_magic_quotes_gpc() )
{
$sql = addslashes($sql);
}
$sql = addslashes($sql);
$sql = str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $sql);
$sql = stripslashes($sql);
$sql = mysql_real_escape_string($sql);
return $sql;
}
$dbresult=mysql_query("SELECT * FROM jadval where id={escape($sql)}",$dblink);
while($row=mysql_fetch_assoc($dbresult))
{$onvan=$row['subject'];
$begir=str_replace(" ","_",$onvan);
echo "<a href=http://site.ir/link/{$row['id']}/$begir title=\"{$row['subject']}\">{$row['subject']}</a><br>";
echo ($row['body']);
echo "<br>";
echo ('<a href="'.$row['linki'].'"> لينك</a>');
echo ":&nbsp";
echo jdate("h:i:s Y/m/d",strtotime($row["date"]));
}
mysql_close($dblink);
}
}
?>
</div>
</div>
</body>
</html>

Unique
سه شنبه 02 خرداد 1391, 23:59 عصر
معذرت میخوام ولی شما کارهای بیخودی داری انجام میدی اصلا این اسکریپت escape کردن نمیخواد !


$id = intval($_GET['id']);
mysql_query(sprintf("SELECT * FROM jadval where id='%d'",$id),$dblink);

ravand
چهارشنبه 03 خرداد 1391, 08:35 صبح
كاري كه شما گفتي رو كردم و فايده اي نداشت و برنامه از وجود حفره در اين اسكريپت خبر ميده

ravand
چهارشنبه 03 خرداد 1391, 09:51 صبح
فكر ميكنم كه هاستم از تابع get_magic_quotes_gpc() پشتيباني نميكنه . چون توي اطلاعاتش گشتم نبود. به نظر شما بايد چيكار كرد؟

ravand
چهارشنبه 03 خرداد 1391, 10:04 صبح
من اين كد رو روي لوكاست تست ميكنم مقدار صفر در خروجي بهم ميده ولي روي هاست مقدار يك ميده.

<?php
$kar="/ '";
echo get_magic_quotes_gpc($kar);
?>

از اين روش هم استفاده كردم نوشت فعال است.

<?php
if(get_magic_quotes_gpc())
echo "Magic quotes are enabled";
else
echo "Magic quotes are disabled";
?>
متشكرم.

ravand
چهارشنبه 03 خرداد 1391, 16:05 عصر
بالاخره مشكلم حل شد.
ايمدم اين قسمت ها رو حذف كردم:

if(is_numeric($sql) and strlen($sql)<5){
از اين دستور هم نبايد استفاده كرد.

die("");
استفاده از نرم افزاري امنيتي هويج تجربه ي خوبي بود چند بار تا حالا اسمش رو شنيده بودم ولي بهش توجهي نكرده بودم.
اگه كسي نرم افزار ديگه اي هم ميشناسه ممنون ميشم معرفي كنه.
كدهاي من اينطوري شد:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>onvan</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
A{ text-decoration: none; }
#matlab{
width:477px;
direction:rtl;
text-align:right;
border-radius:3px;
padding:2px 0px;
border:1px #CCCCCC solid;
font-size:20px;
border:1px silver solid;
padding:10px 15px;
min-height:50px;
background-color:#F7F7F7;
shadow:1px 1px #ccc;
margin-top:10px;
border-radius:5px;
behavior: url('PIE.htc');
}

#matlab:hover
{
background-color:#EEEEEE;
}
</style>
</head>
<body>
<div align="center">
<div id="matlab">
<?php
header("Cache-Control: no-cache, must-revalidate");
if((!isset($_GET["id"])) or ($_GET["id"]=="") or (!is_numeric($_GET["id"]))){
header("Location:HTTP/1.0 404 Not Found");
exit;
}else{
$sql =$_GET['id'];
}
$servername="localhost";
$dbname="database";
$user="root";
$pass="";
$dblink=mysql_connect($servername,$user,$pass);
mysql_select_db($dbname,$dblink);
date_default_timezone_set('Asia/Tehran');
include('jdf.php');
mysql_query("SET CHARACTER SET utf8",$dblink);
function escape($sql) {
$symbol = array(',', ')', '(', "'", '"','!', '?', '/', '[', ']', '+', '=', '#', '\x00','\x7F','\xC0','\xFD', '\n', '\r','\t', '\x1a', '&', '$', 'select', 'delete', 'from', 'xml', 'script', 'union','order','by','select','all','group','havin g');
$sql= preg_replace("/<.*?>/", "",htmlentities($sql));
$sql =str_replace($symbol,"",$sql);
$sql = trim($sql);
$sql = strip_tags($sql);
if(!get_magic_quotes_gpc() )
{
$sql = addslashes($sql);
}
$sql = addslashes($sql);
$sql = str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $sql);
$sql = stripslashes($sql);
$sql = mysql_real_escape_string($sql);
return $sql;
}
$dbresult=mysql_query("SELECT * FROM jadval where id={escape($sql)}",$dblink);
while($row=mysql_fetch_assoc($dbresult))
{$onvan=$row['subject'];
$begir=str_replace(" ","_",$onvan);
echo "<a href=http://site.ir/link/{$row['id']}/$begir title=\"{$row['subject']}\">{$row['subject']}</a><br>";
echo ($row['body']);
echo "<br>";
echo ('<a href="'.$row['linki'].'"> لينك</a>');
echo ":&nbsp";
echo jdate("h:i:s Y/m/d",strtotime($row["date"]));
}
mysql_close($dblink);
}

?>
</div>
</div>
</body>
</html>

Unique
چهارشنبه 03 خرداد 1391, 18:57 عصر
راستش من متعجبم که چرا به یک نرم افزار اعتماد میکنیم !!؟ ولی به خودمون و تجربمون بی اعتمادیم ! دوستان ما خودمون نرم افزار نویس هستیم و میدونیم پیچیدگی ها و روش های اجرای یک اسکریپت به قدری متفاوت است که عملا هیچ برنامه ای نمیتونه ادعا کنه میتونه در اسکریپت حفره امنیتی پیدا کنه ! مگه مثال های نقضی که براش تعریف شده باشه.

خطهایی که شما حذف کردین عملا هیچ حفره ای به حساب نمیان ! مشکل کد شما همون بحث اشتباه ا استفاده از escape و توابعی که گذاشتین در جایی هست که اصلا بهش نیازی نیست !

ravand
چهارشنبه 03 خرداد 1391, 19:05 عصر
خب شما هم كه ادعا ميكني برنامه نويس هستي نتونستي مشكل اين اسكريپت رو پيدا كني. و داري ميگي كه من فقط اشتباه كردم

Unique
پنج شنبه 04 خرداد 1391, 00:45 صبح
من عذر میخوام اگه لحنم جوری بوده که ادعایی را در بر داشته و کوچکتر از اون هستم که بخوام در زمینه برنامه نویسی ادعایی بکنم !
قصد و نیت من چیز دیگه ای بود که اینگونه تفسیر شد ، من نظرم را گفتم و امیدوارم شما بد برداشت نکرده باشی ، من در ابتدا فکر کردم شما دارین عملا از این کد استفاده میکنین و دچار مشکل شدین و کسی از طریق این کد به سایت شما نفوذ کرده ! تنها مشکلی که من میدیدم استفاده نابجا از escape برای یک مقدار integer بود که عرض کردم و مثال هم زدم ! وقتی شما گفتین یک برنامه توی اسکریپت شما حفره پیدا کرده اصلا موضوع عوض شد چون این برنامه ها الگوریتم های پیش فرضی دارند و نمیشه روشون حساب کرد ، فقط خواستم این موضوع را عرض کنم.