[Discussion] PHP - Module chống sql injection |
05/06/2011 16:16:04 (+0700) | #1 | 239253 |
|
chiro8x
Member
|
0 |
|
|
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
|
|
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){} |
|
|
|
[Discussion] PHP - Module chống sql injection |
06/06/2011 07:31:31 (+0700) | #2 | 239406 |
|
chiro8x
Member
|
0 |
|
|
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
|
|
Sao hok ai có ý kiến gì thế 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){} |
|
[Discussion] PHP - Module chống sql injection |
08/06/2011 19:16:23 (+0700) | #3 | 239746 |
|
longvnit
Member
|
0 |
|
|
Joined: 11/01/2007 12:02:01
Messages: 9
Offline
|
|
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)."')";
|
|
|
|