banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận bảo mật PHP - Module chống sql injection  XML
  [Discussion]   PHP - Module chống sql injection 05/06/2011 16:16:04 (+0700) | #1 | 239253
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]
Em không nghiên cứu về hack heck gì đâu. Tại dạo này đang làm việc, đang viết một cái web game nhưng tới phần không phải chuyên môn nên chết khổ với nó. Em cũng có tham khảo thêm vài tài liệu và code rồi, nên giờ mạn phép chia sẽ kết quả của quá trình tìm tòi của mình. Mong rằng nhận được ý kiến đòng góp của các bác. Sau đây là code mà em tìm tòi và viết. Giờ em mới bắt đầu project nên đang xây dựng các module :"<


Code:
<?php
/*
Var Object
By Tran Anh Dung
Email: <a href="mailto:chiro8x@gmail.com">chiro8x@gmail.com</a>
Mobile: +84 974 431 568
-----------------------------------

$ = new var_object
*/
class var_object{
	
	private $cheatf;
	
//Sql injection noobs lol
	private $sqlinject = array("union select",
		") values (",
		"table_name",
		"information_schemal",
		"column_name",
		"version()",
		"@@version",
		"concat(",
		" and mid(");

//Sql injection smart
	private $sqlbeat = array("--",
		"'",
		"`",
		"(",
		")",
		"union",
		"select",
		"/*",
		"*/",
		"_name",
		"0x",
		"#",
		";",
		"insert",
		"into",
		"hex",
		"sha1",
		"concat",
		"_schemal",
		"null",
		"!32302",
		"select if",
		"+",
		"char",
		"load_file",
		"limit",
		"order",
		"where",
		"by",
		"benchmark",
		"=",
		"not",
		"or",
		"and");

//Found this
	public function found($haystack, $needle, $offset = NULL){
		
		if(!strpos(strtolower($haystack), strtolower($needle))){
			return false;
		}else{
			return true;
		}
		
	}

//Check sql injection
	public function check($value){
		
		$tmp = urlencode($value);
		
		if($this->found($tmp, "%00")){
			
			return false;
			
		}else{
			
			$final = false;
			$i = 0;
			$c = 0;
			//Noob check 
			while($final == false && $i < count($this->sqlinject)){
				$final = $this->found($value, $this->sqlinject[$i]);
				$i++;
			}
			
			//Smart check 
			if($final == false){
				for($i = 0; $i < count($this->sqlbeat); $i++){
					$times = substr_count(strtolower($value), strtolower($this->sqlbeat[$i]));
					if($times > 0 )$c += $times * strlen($this->sqlbeat[$i]);
				}
				if($c/strlen($value) > 0.4) $final = true;
			}

			return !$final;
			
		}
		
	}

//Data from GET request
	public function get($feild, &$value){
		
		if(isset($_GET[$feild])){
			
			return true;
			
		}else{
			
			if($this->check($_GET[$feild])){
				$value = $_GET[$feild];
				return true;
			}else{
				return false;
			}
			
		}
		
	}

//Data from POST request
	public function post($feild, &$value){
		
		if(isset($_POST[$feild])){
			
			return true;
			
		}else{
			
			if($this->check($_GET[$feild])){
				$value = $_POST[$feild];
				return true;
			}else{
				return false;
			}
			
		}
		
	}
	
}
?>


Sau đây là cách sử dụng:

Code:
<?php
$demo = new var_object;

if($demo->get("id",$tmp)){ //$_GET['id']
	echo $tmp;
}else{
	echo "error !";
}
?>


Agrigatuo ^^!
while(1){}
[Up] [Print Copy]
  [Discussion]   PHP - Module chống sql injection 06/06/2011 07:31:31 (+0700) | #2 | 239406
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]
Sao hok ai có ý kiến gì thế smilie giúp em với. Em có test qua cái code này nhưng do hiểu biết hạn chế nên chưa biết được nó còn thiếu sót chổ nào. Rất mong được chỉ giáo.
while(1){}
[Up] [Print Copy]
  [Discussion]   PHP - Module chống sql injection 08/06/2011 19:16:23 (+0700) | #3 | 239746
[Avatar]
longvnit
Member

[Minus]    0    [Plus]
Joined: 11/01/2007 12:02:01
Messages: 9
Offline
[Profile] [PM]
Theo mình nghĩ thì bạn đang làm phức tạp hoá vấn đề, mình chỉ làm đơn giản như sau:
Code:
function getEscaped( $text, $extra = false ) {
	$string = mysqli_real_escape_string( $this->_resource, $text );
	if ($extra) {
		$string = addcslashes( $string, '%_' );
	}
	return $string;
}

Ví dụ:
Code:
$q = "INSERT INTO table_name VALUES ('".getEscaped($value)."')";

[Up] [Print Copy]
  [Discussion]   PHP - Module chống sql injection 08/06/2011 22:07:25 (+0700) | #4 | 239775
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]

longvnit wrote:
Theo mình nghĩ thì bạn đang làm phức tạp hoá vấn đề, mình chỉ làm đơn giản như sau:
Code:
function getEscaped( $text, $extra = false ) {
	$string = mysqli_real_escape_string( $this->_resource, $text );
	if ($extra) {
		$string = addcslashes( $string, '%_' );
	}
	return $string;
}

Ví dụ:
Code:
$q = "INSERT INTO table_name VALUES ('".getEscaped($value)."')";

 


Mình muốn chặn luôn và loại bỏ các truy vấn đó cơ. Vì việc của mình cần phải chính xác cao. Không làm ẩu được, với lại sợ cái gọi là SQL cheat sheet smilie . Xin lỗi mình còn kém, về cơ bản mình hiểu là code của bạn thêm \ vào trước kí tự đặc biệt :"<. Nhưng mình không chắc là nó an toàn.
while(1){}
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|