رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
توابع مربوط به امنیت در پی اچ پی
#1
با سلام
دوستان تا حالا فقط از این توابع توکدهام استفاده کردم.
1-
mysql_real_escape_string($value);
2-
کد:
htmlentities($value,ENT_QUOTES,'utf-8');
می خواستم توی این بخش درباره از این دست توابع بیشتر بحث کنیم و یا حتی اگر کلاسی برای این کار(امنیت) نوشته شده با هم فکری هم دراختیار همه دوستان قرار بدیم.
پاسخ
تشکر شده توسط: sorkhabi
#2
در مورد mysql_real_escape_string که چون mysql دیگه به زودی کامل حذف میشه از PHP، بهتره از mysqli استفاده کنید، ولی باز هم PDO امنیت بیشتری داره. از PDO استفاده کنید.

جای حمیدرضا خالیه توی این تاپیک های امنیتی :D
پاسخ
تشکر شده توسط: sorkhabi
#3
خب دوستان اگه کسی هست بیشتر راهنمایی کنه، کتاب یا مجموعه ی آموزشی در این زمینه هست رو معرفی کنید خیلی عالی میشه بلاخره این موضوع بسیار حائز اهمیت هست و ما باید بیشتر در باره ش بررسی کنیم و حرف بزنیم.
پاسخ
تشکر شده توسط:
#4
همونطوری که دوستان گفتن pdo بهترین گزینه است ولی خب اگه میخوای با دستورات mysql کار کنی این کتاب رو دانلود کن :
http://barnamenevisi.blogsky.com/1393/01/01/post-123
صفحه ی 80 رو بخون.
پاسخ
تشکر شده توسط:
#5
بهترین گزینه استفاده از prepare statement هستش حالا چه از PDO میخواین استفاده بکنید یا mysqli فرقی نمیکنه ، روش های دیگه هم استفاده از ADODB و یا ODBC هستش ، من خودم از کلاس زیر استفاده میکنم برای موقعی که بخوام خام کد بزنم و مشکلی هم نداره یا میشه گفت تا 90 % اوکیه :
class DataBase{
	private $fields;
	public function __construct(){
		$this->fields = array('con','hostname','name','username','password');
	}
	public function __set($key , $value){
		if(in_array($key,$this->fields)){
		  $this->fields[$key] = $value;
		}
	}
	public function __get($key){
		if(isset($this->fields[$key])){
			return $this->fields[$key];
		}
		return null;
	}
	public function connect_db(){
	    try{
			$this->fields['con'] = new mysqli($this->fields['hostname'],$this->fields['username'],$this->fields['password']);
			$this->fields['con']->select_db($this->fields['name']);
			$this->fields['con']->query('SET NAMES 'utf8'');
		}catch(Exception $exc){
			throw new Exception('Error to Connect DataBase !');
		}
	}
	public function queryResult($query , $multi_result = false , $affected_rows = false ){
		if(!isset($this->fields['con'])){
			connect_db();
		}
		$result = $this->fields['con']->query($query);
		if(!$multi_result){
			return $affected_rows ? array('result'=> $result ,'affected_rows'=>$this->fields['con']->affected_rows()) : array('result'=> $result) ;
		}else{
			while( $row = $result->fetch_assoc()){
					$mResult[] = $row;
			}
			return array('multiResult'=>$mResult);
		}
	}
	
	public function checkInput($value){
		if(!isset($this->fields['con'])){
			connect_db();
		}
		return htmlspecialchars($this->fields['con']->real_escape_string($value));
	}	
}
پاسخ
تشکر شده توسط:
#6
نگاه کنید امنیت با این مفهوم استفاده از تابع تکمیل نمیشه و به همین ها هم محدود نمیشه

امنیت در PHP شاخه های کلی اش همین ها هستند (xss,sql injection و ...)

البته درک نادرست از سیستم و عدم تشخیص حالت های مختلف یک سیستم باعث بوجود امدن باگ امنیتی می شود مثلا درنظر بگیرید که اسکریپتی امکان مدیریت فایل بر اساس مجوز هایی که مدیریت تعیین می کند دارد ولی بر فرض مثال این اسکریپت فایل .htaccess را نیز آپلود میکند که این یک حفره امنیتی است و هیچ ربطی به Xss,sql و ... ندارد.

بیشتر سایت های مطرح جهان از این نوع باگ ها مورد حمله قرار میگیرند و خیلی ها هم مورد حمله Xss قرار میگیرند البته دقیق نمیتونم بگم ولی تا به حال هر چی خوندم و دیدم اینطوری بوده چون واقعا تشخیص این نوع خطاها نیاز به تجربه عملی و تحلیل و تلاش زیادی داره

باید همیشه حالت های مختلف یک برنامه را در نظر بگیریم.
پاسخ
تشکر شده توسط: abdollah110110 , olampiad




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