mysqlphp注入
⑴ php + mysql 檢測到注入漏洞,如何注入腳本刪除數據
同一句語句里是不允許出現你這種格式的
如果你是有兩條語句需要依次運行,那你可以用分號隔離。
比如:
insert into article_tmp select * from article;
delete from article;
不過你這兩句語句有嚴重的邏輯性問題
delete from article;這句已經把article表裡的數據都刪了。你緊接著要select * from article,那你返回的肯定是空值,都被你前一句刪了。
⑵ 如何預防PHP MYSQL注入【攻擊】
補充:
對於16進制入侵還沒確切防禦手段,只能自己手動查有沒有被入侵這樣
你可以用javascript做客戶端限制輸入數據,治標不治本而已,填用戶名的表單用username做name
function validate(){
var username = $("#username").val();
if (username.match(/[^a-zA-Z0-9]/) || username.length < 3)
{
alert('Invalid username: \'' + username+'\'' );
return false;
}
}
-------------------------------------------------------
php 漏洞已經相對很少了,告訴你個簡單的預防單引號的方法
寫下這個function
function sql_quote( $value )
{
if( get_magic_quotes_gpc() )
{
$value = stripslashes( $value );
}
if( function_exists( "mysql_real_escape_string" ) )
{
$value = mysql_real_escape_string( $value );
}
else
{
$value = addslashes( $value );
}
return $value;
}
然後寫sql的時候這么寫
$username = $_POST['username'];
query = "SELECT * FROM users WHERE username='".sql_quote($username) . "'";
如果有注入攻擊的話必定用到單引號
//沒有用sql_quote的sql語言
query = "SELECT * FROM users WHERE username='' OR '1'='1'";
//用了的,單引號就被避免了
query = "SELECT * FROM users WHERE username='\' OR \'1\'=\'1'";
⑶ php 如何防止 萬能密碼登錄(mysql注入)
你可以使用內置的addslashes函數,或者使用我下面自己封裝的函數,把$_GET 或者 $_POST的值做處理。
functionaddslashes2($str){
return(!get_magic_quotes_gpc())?addslashes($str):$str;
}
⑷ PHP MYSQL網站注入掃描工具如何使用
先明白注入類型! 一般是比如網站.PHP?id=5 and 1=1 正常 1=2錯誤 就表明有漏洞 然後在把 網站.PHP?id=5 復制到工具里,使查欄位,然後找到注入欄位 插入相應的PHP注入代碼就可以了如 database(),user() load_file 這些,網上一大把
⑸ 關於php mysql 防注入,我的思路,求指點
一般思路就是這樣。
但如果過濾太多字元,那你網站的正常使用也會受到很大影響。
php的addslashes()可以實現你所說的功能,但當你的SQL語句為$sql="select * from article where id=".$_GET['id'];時,過濾單引號什麼的就不會起到什麼作用。
再者,即使你的SQL語句換為$sql="select * from article where id='{$_GET['id']}'";也不見得保險。提交/t.php?id=%cf' or 1=1--%20也可以注入。具體可以網路一下雙位元組漏洞。
不過SQL注入也不是什麼可怕的東西。例如對於要獲取的數值數據,使用intval()過直接(int) $str;就可杜絕。對於字元變數就要注意了,要認真設置好資料庫編碼等等。
如果有好的編程習慣,注入什麼的都不會怕滴。我也是php學習者,用php寫了個博客www.fuxkit.com,歡迎來跟我交流^_^
⑹ 求一段php防mysql注入病毒代碼。
//POST過濾安全
$_POST=check_input($_POST);
function check_input($value)
{
if(get_magic_quotes_gpc()){
$value = htmlspecialchars(trim($value));
} else {
$value = addslashes(htmlspecialchars(trim($value)));
}
return $value;
}
另一種如下:PHP整站防注入程序,需要在公共文件中require_once本文件
<?PHP
//判斷magic_quotes_gpc狀態
if (@get_magic_quotes_gpc ()) {
$_GET = sec ( $_GET );
$_POST = sec ( $_POST );
$_COOKIE = sec ( $_COOKIE );
$_FILES = sec ( $_FILES );
}
$_SERVER = sec ( $_SERVER );
function sec(&$array) {
//如果是數組,遍歷數組,遞歸調用
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = sec ( $v );
}
} else if (is_string ( $array )) {
//使用addslashes函數來處理
$array = addslashes ( $array );
} else if (is_numeric ( $array )) {
$array = intval ( $array );
}
return $array;
}
//整型過濾函數
function num_check($id) {
if (! $id) {
die ( '參數不能為空!' );
} //是否為空的判斷
else if (inject_check ( $id )) {
die ( '非法參數' );
} //注入判斷
else if (! is_numetic ( $id )) {
die ( '非法參數' );
}
//數字判斷
$id = intval ( $id );
//整型化
return $id;
}
//字元過濾函數
function str_check($str) {
if (inject_check ( $str )) {
die ( '非法參數' );
}
//注入判斷
$str = htmlspecialchars ( $str );
//轉換html
return $str;
}
function search_check($str) {
$str = str_replace ( "_", "\_", $str );
//把"_"過濾掉
$str = str_replace ( "%", "\%", $str );
//把"%"過濾掉
$str = htmlspecialchars ( $str );
//轉換html
return $str;
}
//表單過濾函數
function post_check($str, $min, $max) {
if (isset ( $min ) && strlen ( $str ) < $min) {
die ( '最少$min位元組' );
} else if (isset ( $max ) && strlen ( $str ) > $max) {
die ( '最多$max位元組' );
}
return stripslashes_array ( $str );
}
//防注入函數
function inject_check($sql_str) {
return eregi ( 'select|inert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|UNION|into|load_file|outfile', $sql_str );
}
function stripslashes_array(&$array) {
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = stripslashes_array ( $v );
}
} else if (is_string ( $array )) {
$array = stripslashes ( $array );
}
return $array;
}
?>