رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
چطور آدرسم رو کوتاه کنم؟
#1
سلام، بنده برای هر محصولم نیاز به یک آدرس دارم مثل :
http://www.dribbble.net?id=30
از طرفی شنیدم که این آدرس ها مطئن نیستند و باعث هک شدنش می شن، حالا باید چی کار کنم؟
پاسخ
تشکر شده توسط:
#2
خیر این آدرسها باعث هم نمیشن به خودی خود. البته اگه اصول امنیتی رو رعایت کنید. مثلاً اگه id عددی هست، به این شکل باهاش توی کد کار کنید:
$id = (isset($_GET['id'] ? intval($_GET['id']), 0);
اینطوری مطمئن خواهید بود که id$ همیشه یک عدد هست و میتونید بدون نگرانی درمورد SQL Injection ازش توی کوئریها استفاده کنید. اگه با PDO و به روش Prepared Statements و با Bind Parameters کار کنید هم که دیگه مشکلی ازنظر امنیت نخواهد بود و خودش Escape میکنه.
پاسخ
تشکر شده توسط: meysam1366
#3
شما اگه با دستور intval مقدار id رو ارزیابی کنید و هنگام انتخاب از دیتابیس از prepared statements استفاده کنید مشکل امنیتی خاصی نخواهید داشت
موفقیت، نتیجه تشخیص درست است؛ تشخیص درست، نتیجه تجربه است؛ تجربه نیز اغلب نتیجه تشخیص نادرست است.



پاسخ
تشکر شده توسط: sorkhabi , meysam1366
#4
برای کوتاه کردن آدرس هم نیاز به htaccess. دارین. یک فایل به این شکل با نام htaccess. توی پوشه ریشه سایتتون بسازین:
کد:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (\d+)$ index.php?id=$1 [L,NC,QSA]

اگه روی لوکال هاست کار میکنید و سایتتون توی یک پوشه فرعی داخل ریشه سایت هست، باید به این شکل انجام بدین:
کد:
Options +FollowSymlinks
RewriteEngine On
RewriteBase /folderName
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (\d+)$ index.php?id=$1 [L,NC,QSA]

و بجای folderName اسم پوشه سایتتون رو بگذارین. حالا میتونید از لینکهایی به این شکل استفاده کنید:
http://www.dribble.com/30

و سیستم خودش این آدرس رو اجرا میکنه (بدون اطلاع و نمایش به کاربر) :
http://www.dribble.com/index.php?id=30

نکته 1: باید توی تنظیمات Apache قابلیت mod_rewrite رو فعال کرده باشین.
نکته 2: وظیفه قراردادن لینکهای کوتاه شده توی سایت بعهده شماست و این روش، لینکها رو کوتاه نمیکنه بلکه به شما فقط اجازه استفاده از لینکهای کوتاه رو میده و به سرور میگه هروقت لینک کوتاه با ساختاری که گفتم رو دیدی، اون لینک بلندی که جلوش توضیح دادم رو اجرا کن.
پاسخ
تشکر شده توسط: sorkhabi , meysam1366
#5
خوبی اینجور آدرس دهی ها اینه که seo پسند هست.ونقش مهمی توی seo داره
پاسخ
تشکر شده توسط: meysam1366
#6
(02-03-1394، 02:22 ب.ظ)Mohammadsgh نوشته: خوبی اینجور آدرس دهی ها اینه که seo پسند هست.ونقش مهمی توی seo داره

همین آدرس هایی که مثل ?id=20 نوشته می شن، SEO پسند هستن؟
پاسخ
تشکر شده توسط:
#7
(02-03-1394، 01:40 ب.ظ)ADMIN نوشته: خیر این آدرسها باعث هم نمیشن به خودی خود. البته اگه اصول امنیتی رو رعایت کنید. مثلاً اگه id عددی هست، به این شکل باهاش توی کد کار کنید:


$id = (isset($_GET['id'] ? intval($_GET['id']), 0);
اینطوری مطمئن خواهید بود که id$ همیشه یک عدد هست و میتونید بدون نگرانی درمورد SQL Injection ازش توی کوئریها استفاده کنید. اگه با PDO و به روش Prepared Statements و با Bind Parameters کار کنید هم که دیگه مشکلی ازنظر امنیت نخواهد بود و خودش Escape میکنه.

درسته، من والا از intval استفاده نکردم ولی از PDO استفاده می کنم، ممنون ... فقط فرق این بخش کد های PDO با اون Prepare Statement چیه؟


<?php
    define('PDO_DSN','mysql:host=localhost;dbname=dribbble');
    define('DB_User','root');
    define('DB_Pass','');

	class Database
	  { 
         private static $handler;
		
		 private static function getHandler(){
			if(!isset(self::$handler)){ 
				try{
					self::$handler=new PDO(PDO_DSN,DB_User,DB_Pass);}
					
                catch(PDOException $e){
					trigger_error('Error: Please Call Your Admin : '.$e->getMessage(), E_USER_ERROR);}}
			 
				return self::$handler;}
				
         private static function close(){
			self::$handler=null;}
			
         public static function Execute($query){
			try{
				$connection=self::gethandler();
				$sqlStatement=$connection->query($query);
 				return true;}
				  
			catch( PDOException $pe){
				self::close();
				trigger_error($pe-getMessage(),E_USER_ERROR);//E_USER_ERROR 
				return false;}}
				
 	     public static function FetchAll($query){
			try{
				$handler=self::getHandler();
				$result=$handler->query($query);
 				return $result->fetchAll(PDO::FETCH_ASSOC);}
				
			catch(PDOEception $pe){
				self::close();
				trigger_error($pe-getMessage());//E_USER_ERROR 
				return false;}}
				
	     public static function FetchOne($query){
			try{
				$handler=self::getHandler();
				$result=$handler->query($query);
 				return $result->fetch(PDO::FETCH_ASSOC);}
				
			catch(PDOEception $pe){
				self::close();
				trigger_error($pe->getMessage());//E_USER_ERROR 
				return false;}}
				
	     public static function FetchFiled($query){
			   $connection=self::gethandler();
			   $sqlstatement=$connection->query($query);
			   $result=$sqlstatement->fetch(PDO::FETCH_NUM)	;
               return  $result=$result[0];}}
?>
پاسخ
تشکر شده توسط:
#8
نقل قول: همین آدرس هایی که مثل ?id=20 نوشته می شن، SEO پسند هستن؟
خیر. آدرسهایی که به این شکل هستند
site.com/aaa/bbb
یا
site.com/محصول-یک

پاسخ
تشکر شده توسط:
#9
کلاسی که قرار دادید اصلا از prepared statements استفاده نکرده به این لینک نگاه کنید به مثال PDO آن دقت کنید باید مقادیر را خارج از دستور SQL به آن Bind کنید
http://www.w3schools.com/php/php_mysql_p...ements.asp
موفقیت، نتیجه تشخیص درست است؛ تشخیص درست، نتیجه تجربه است؛ تجربه نیز اغلب نتیجه تشخیص نادرست است.



پاسخ
تشکر شده توسط: sorkhabi
#10
تشکر از دوستان، این کد رو من نوشتم ولی کار نمی کنه :
$id = (isset($_GET['id'] ? intval($_GET['id']), 0); 

این ارور رو می ده :
کد:
( ! ) Parse error: syntax error, unexpected '?', expecting ',' or ')' in D:\Wamp\www\dribbble\DashBoard.php on line 5

مشکل از چیه؟
پاسخ
تشکر شده توسط:
#11
خب غلط نوشتین باید به این صورت بنویسید
$id = (isset($_GET['id']) ? intval($_GET['id']) : 0;

پ.ن. ادیتور فروم هیچی نداره واسه همین کدهارو اینجوری گزاشتم
موفقیت، نتیجه تشخیص درست است؛ تشخیص درست، نتیجه تجربه است؛ تجربه نیز اغلب نتیجه تشخیص نادرست است.



پاسخ
تشکر شده توسط: sorkhabi
#12
(03-03-1394، 10:07 ب.ظ)hamo نوشته: پ.ن. ادیتور فروم هیچی نداره واسه همین کدهارو اینجوری گزاشتم

برای مشاهده ادیتور کامل، روی دکمه «پاسخ جدید» در پایین صفحه کلیک کنید و از ادیتور پاسخ سریع استفاده نکنید. اونجا میتونید کد PHP درج کنید.
پاسخ
تشکر شده توسط: hamo , sorkhabi




کاربران در حال بازدید این موضوع: 1 مهمان