首頁 後端開發 php教程 php中mysql如何防注入與一些防注入函數用法總結

php中mysql如何防注入與一些防注入函數用法總結

Jul 17, 2017 am 11:32 AM
mysql php

簡單判斷是否有註入漏洞以及原理。防注入的程式碼其實來來去去都是那些組合,然後根據自己程式碼變通,重要是知道其中原理,為什麼過濾這些字符,字符有什麼危害。

sql语句如:select  *  from phpben where id = 1
登入後複製

相關mysql影片教學推薦:《mysql教學

#1.mysql注入語句

(1)不用使用者名稱和密碼

//正常语句  
$sql ="select * from phpben where user_name='admin' and pwd ='123'";  
//在用户名框输入'or'='or'或 'or 1='1 然后sql如下  
$sql ="select * from phpben where user_name=' 'or'='or'' and pwd ='' ";  
$sql ="select * from phpben where user_name=' 'or 1='1' and pwd ='' ";
登入後複製

(2)在不輸入密碼的情況下,利用某使用者。

//正常语句  
$sql ="select * from phpben where user_name='$username' and pwd ='$pwd'";  
//利用的用户名是benwin 则用户名框输入benwin'#  密码有无都可,则$sql变成  
$sql ="select * from phpben where user_name=' benwin'#' and pwd ='$pwd'";
登入後複製

這是因為mysql中其中的一個注悉是“#”,上面語句中#已經把後面的內容給注悉掉,所以密碼可以不輸入或任意輸入。網路上有些人介紹說用“/*”來注悉,筆者想提的是只有開始注悉沒結束注悉“*/”時,mysql會報錯,也不是說“/**/」不能注悉,而是這裡很難加上「*/”來結束註悉,還有“– ”也是可以注悉mysql 但要注意“–”後至少有一個空格也就是“– ”,當然防注入代碼要把三種都考慮進來,值得一提的是很多防注入程式碼中沒把「– 」考慮進防注入範圍。

(3)猜解某使用者密碼

//正常语句  
$sql ="select * from phpben.com where user_name='$username' and pwd ='$pwd'";  
//在密码输入框中输入“benwin' and left(pwd,1)='p'#”,则$sql是  
$sql ="select * from phpben.com where user_name=' benwin' and left(pwd,1)='p'#' and pwd ='$pwd'";
登入後複製

(4)插入資料時提權

//正常语句,等级为1  
$sql = "insert into phpben.com (`user_name`,`pwd`,`level`) values(‘benwin','iampwd',1) ";  
//通过修改密码字符串把语句变成  
$sql = "insert into phpben.com (`user_name`,`pwd`,`level`) values(‘benwin','iampwd',5)#',1) ";  
$sql = "insert into phpben.com (`user_name`,`pwd`,`level`) values(‘benwin','iampwd',5)--  ',1) ";这样就把一个权限为1的用户提权到等级5
登入後複製

(5)惡意更新與刪除

//正常语句  
$sql = "update phpben set `user_name` = ‘benwin' where id =1";  
//注入后,恶意代码是“1 or id>0”  
$sql = "update phpben set `user_name` = ‘benwin' where id =1 or id>0";  
//正常语句  
$sql = "update phpben set  `user_name` ='benwin' where id=1";  
//注入后  
$sql = "update phpben set  `user_name` ='benwin' where id>0#' where id=1";  
$sql = "update phpben set  `user_name` ='benwin' where id>0-- ' where id=1";
登入後複製

(6)猜測表格資訊的注入sql

//正常语句  
$sql ="select * from phpben1 where`user_name`='benwin'";  
//猜表名,运行正常则说明存在phpben2表  
$sql ="select * from phpben1 where`user_name`='benwin' and (select count(*) from phpben2 )>0#' ";  
//猜表字段,运行正常则说明phpben2表中有字段colum1  
$sql ="select * from phpben1 where`user_name`='benwin' and (select count(colum1) from phpben2 )>0#'";  
//猜字段值  
$sql ="select * from phpben1 where`user_name`='benwin' and left(pwd,1)='p'#''";
登入後複製

2. 防注入的一些函數和注意事項

(1)addslashes 和stripslashes

Addslashes為這些「'」、「」」、「\」,「NULL」 加上斜桿「\'」、「\」」、「\\」,「\NULL」, stripslashes則相反,這裡要注意的是php.ini是否開啟了magic_quotes_gpc=ON,開啟若使用addslashes會出現重複。所以使用的時候要先get_magic_quotes_gpc()檢查

(2)mysql_escape_string()和mysql_ real _escape_string()

##mysql_real_escape_string 必須在(PHP 4 >= 4.3.0, PHP 5)的情況下才能使用。否則只能用mysql_escape_string

if (PHP_VERSION >= '4.3')  
{  
$string  =  mysql_real_escape_string($string);  
}else  
{  
$string  =  mysql_escape_string($string );  
}
登入後複製
(3)字元取代函數和匹配函數

str_replace() 、perg_replace()這些函數之所以也在這裡提是因為這些函數可以用來過濾或替代一些敏感、致命的字符。

以上是php中mysql如何防注入與一些防注入函數用法總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP的未來:改編和創新 PHP的未來:改編和創新 Apr 11, 2025 am 12:01 AM

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。

navicat premium怎麼創建 navicat premium怎麼創建 Apr 09, 2025 am 07:09 AM

使用 Navicat Premium 創建數據庫:連接到數據庫服務器並輸入連接參數。右鍵單擊服務器並選擇“創建數據庫”。輸入新數據庫的名稱和指定字符集和排序規則。連接到新數據庫並在“對象瀏覽器”中創建表。右鍵單擊表並選擇“插入數據”來插入數據。

mysql:簡單的概念,用於輕鬆學習 mysql:簡單的概念,用於輕鬆學習 Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

MySQL和SQL:開發人員的基本技能 MySQL和SQL:開發人員的基本技能 Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

navicat怎麼新建連接mysql navicat怎麼新建連接mysql Apr 09, 2025 am 07:21 AM

可在 Navicat 中通過以下步驟新建 MySQL 連接:打開應用程序並選擇“新建連接”(Ctrl N)。選擇“MySQL”作為連接類型。輸入主機名/IP 地址、端口、用戶名和密碼。 (可選)配置高級選項。保存連接並輸入連接名稱。

phpmyadmin怎麼打開 phpmyadmin怎麼打開 Apr 10, 2025 pm 10:51 PM

可以通過以下步驟打開 phpMyAdmin:1. 登錄網站控制面板;2. 找到並點擊 phpMyAdmin 圖標;3. 輸入 MySQL 憑據;4. 點擊 "登錄"。

php:死亡還是簡單地適應? php:死亡還是簡單地適應? Apr 11, 2025 am 12:13 AM

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

See all articles