PDA

View Full Version : سوال: ایجاد یه تابع مقابل اس کیو ال اینجکشن و داده های مخرب



phpweb
چهارشنبه 25 اسفند 1389, 15:11 عصر
من برای مقابله با اس کیو ال اینجکشن و داده های مخرب از تابع امنیتی زیر استفاده می کنم. لطفا بگید بنظر شما این تابع تا چه حد جلوی اس کیو ال اینجکشن رو می گیره؟

اگه این تابع به اصلاح احتیاج داره، لطفا تابع رو اصلاح کنید و ایرادش رو بهم بگید.




function injection($str)
{
$arr[]='.';
$arr[]='-';
$newarr[]='\.';
$newarr[]='\-';
$tstr=trim($str);
$estr=htmlentities($tstr, ENT_QUOTES,'UTF-8');
$sstr=htmlspecialchars($estr, ENT_QUOTES,'UTF-8');
$mstr = str_replace($arr, $newarr, $sstr);
return $mstr;
}

رضا قربانی
چهارشنبه 25 اسفند 1389, 17:19 عصر
همیشه داده هایی که پست ارسال می کنی رو به این صورت بگیر

البته من نمونه کدی که خودم استفاده می کنم رو واست قرار می دم


$symbol = array(',', ')', '(', "'", '"','!', '?', '/', '[', ']', '+', '=', '#');

if(isset($_POST['name'],$_POST['email'],$_POST['subject'],$_POST['text']))
{
$name = preg_replace("/<.*?>/", "",$_POST['name'] );
$name =str_replace( $symbol ,"",$name);


$email = preg_replace("/<.*?>/", "",$_POST['email'] );
$email =str_replace( $symbol ,"",$email);


$subject = preg_replace("/<.*?>/", "",$_POST['subject'] );
$subject =str_replace( $symbol ,"",$subject);


$text = preg_replace("/<.*?>/", "",$_POST['text'] );
$text =str_replace( $symbol ,"",$text);


if(!empty($name) and !empty($email)and !empty($subject) and !empty($text))
{
$link = mysql_connect($dbhost,$dbuser,$dbpass) ;
mysql_select_db($dbname,$link);

.
.
.
و بقیه دستورات شما

{

parselearn
چهارشنبه 25 اسفند 1389, 17:46 عصر
اين دو تاپيك رو ببينيد
http://barnamenevis.org/showthread.php?174827-%D8%AC%D9%84%D9%88%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-sql-injection&highlight=
http://barnamenevis.org/showthread.php?242269-sqlinjection&highlight=

براي چك كردن كل متغييرها


foreach($_POST as $key => $value){

foreach($_GET as $key => $value){

phpweb
چهارشنبه 25 اسفند 1389, 20:46 عصر
همیشه داده هایی که پست ارسال می کنی رو به این صورت بگیر

البته من نمونه کدی که خودم استفاده می کنم رو واست قرار می دم


$symbol = array(',', ')', '(', "'", '"','!', '?', '/', '[', ']', '+', '=', '#');

if(isset($_POST['name'],$_POST['email'],$_POST['subject'],$_POST['text']))
{
$name = preg_replace("/<.*?>/", "",$_POST['name'] );
$name =str_replace( $symbol ,"",$name);


$email = preg_replace("/<.*?>/", "",$_POST['email'] );
$email =str_replace( $symbol ,"",$email);


$subject = preg_replace("/<.*?>/", "",$_POST['subject'] );
$subject =str_replace( $symbol ,"",$subject);


$text = preg_replace("/<.*?>/", "",$_POST['text'] );
$text =str_replace( $symbol ,"",$text);


if(!empty($name) and !empty($email)and !empty($subject) and !empty($text))
{
$link = mysql_connect($dbhost,$dbuser,$dbpass) ;
mysql_select_db($dbname,$link);

.
.
.
و بقیه دستورات شما

{


بنظرم باید بیشتر روی تابع کار کنید. چون مقادیر هگزا دسیمال رو در نظر نمی گیره.

shahriyar3
پنج شنبه 26 اسفند 1389, 02:50 صبح
اگه این تابع به اصلاح احتیاج داره، لطفا تابع رو اصلاح کنید و ایرادش رو بهم بگید.




$estr=htmlentities($tstr, ENT_QUOTES | ENT_IGNORE,"UTF-8");
$sstr=htmlspecialchars($estr, ENT_QUOTES | ENT_IGNORE,"UTF-8");



اينجوري استاندارد تره :چشمک:

رضا قربانی
پنج شنبه 26 اسفند 1389, 09:02 صبح
بنظرم باید بیشتر روی تابع کار کنید. چون مقادیر هگزا دسیمال رو در نظر نمی گیره.
خب اضافه کن $symbol . هر چی که دوست داری فیلتر بشه.
مقادیر هگزا دیسمال چی هست ؟ همون مبنای 16 رو می گید ؟ شما که می دونید خوبش کنید ما یاد بگیریم

phpweb
پنج شنبه 26 اسفند 1389, 10:31 صبح
خب اضافه کن $symbol . هر چی که دوست داری فیلتر بشه.
مقادیر هگزا دیسمال چی هست ؟ همون مبنای 16 رو می گید ؟ شما که می دونید خوبش کنید ما یاد بگیریم

منم از دوستان در مورد مقادیر هگزا دسیمال شنیدم