首頁 後端開發 php教程 PHP与SQL注入攻击防范小技巧_PHP

PHP与SQL注入攻击防范小技巧_PHP

Jun 01, 2016 pm 12:14 PM
注入攻擊 防範

下面来谈谈SQL注入攻击是如何实现的,又如何防范。

 看这个例子:
复制代码 代码如下:
// supposed input
$name = "ilia'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

 很明显最后数据库执行的命令是:

SELECT * FROM users WHERE name=ilia; DELETE FROM users

 这就给数据库带来了灾难性的后果–所有记录都被删除了。

 不过如果你使用的数据库是MySQL,那么还好,mysql_query()函数不允许直接执行这样的操作(不能单行进行多个语句操作),所以你可以放心。如果你使用的数据库是SQLite或者PostgreSQL,支持这样的语句,那么就将面临灭顶之灾了。

 上面提到,SQL注入主要是提交不安全的数据给数据库来达到攻击目的。为了防止SQL注入攻击,PHP自带一个功能可以对输入的字符串进行处理,可以在较底层对输入进行安全上的初步处理,也即Magic Quotes。(php.ini magic_quotes_gpc)。如果magic_quotes_gpc选项启用,那么输入的字符串中的单引号,双引号和其它一些字符前将会被自动加上反斜杠\。

 但Magic Quotes并不是一个很通用的解决方案,没能屏蔽所有有潜在危险的字符,并且在许多服务器上Magic Quotes并没有被启用。所以,我们还需要使用其它多种方法来防止SQL注入。

 许多数据库本身就提供这种输入数据处理功能。例如PHP的MySQL操作函数中有一个叫mysql_real_escape_string()的函数,可将特殊字符和可能引起数据库操作出错的字符转义。

 看这段代码:
复制代码 代码如下:
//如果Magic Quotes功用启用
if (get_magic_quotes_gpc()) {
$name = stripslashes($name);
}else{
$name = mysql_real_escape_string($name);
}

mysql_query("SELECT * FROM users WHERE name='{$name}'");

 注意,在我们使用数据库所带的功能之前要判断一下Magic Quotes是否打开,就像上例中那样,否则两次重复处理就会出错。如果MQ已启用,我们要把加上的\去掉才得到真实数据。

 除了对以上字符串形式的数据进行预处理之外,储存Binary数据到数据库中时,也要注意进行预处理。否则数据可能与数据库自身的存储格式相冲突,引起数据库崩溃,数据记录丢失,甚至丢失整个库的数据。有些数据库如 PostgreSQL,提供一个专门用来编码二进制数据的函数pg_escape_bytea(),它可以对数据进行类似于Base64那样的编码。

 如:
复制代码 代码如下:
// for plain-text data use:
pg_escape_string($regular_strings);

// for binary data use:
pg_escape_bytea($binary_data);

 另一种情况下,我们也要采用这样的机制。那就是数据库系统本身不支持的多字节语言如中文,日语等。其中有些的ASCII范围和二进制数据的范围重叠。

 不过对数据进行编码将有可能导致像LIKE abc% 这样的查询语句失效。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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)

Vue專案中的安全隱憂及防範方法 Vue專案中的安全隱憂及防範方法 Jun 11, 2023 pm 10:10 PM

Vue是一款流行的JavaScript框架,廣泛用於建立單頁應用程式。在開發Vue專案時,安全性問題是需要關注的關鍵問題,因為在一些不當的操作下,Vue可以成為攻擊者攻擊的目標。在本文中,我們將介紹Vue專案中常見的安全隱患,以及如何防範這些隱患。 XSS攻擊XSS攻擊是指攻擊者利用網站漏洞,透過注入程式碼的方式,實現對使用者頁面的竄改或資訊的盜取。在Vue

如何使用Nginx防範LDAP注入攻擊 如何使用Nginx防範LDAP注入攻擊 Jun 10, 2023 pm 08:19 PM

隨著網路安全漏洞增多,LDAP注入攻擊已經成為了許多網站面臨的安全隱患。為了保護網站安全,防範LDAP注入攻擊,需要使用一些安全措施。其中,Nginx作為一個高效能的Web伺服器和反向代理伺服器,可以為我們提供很多便利和保護。這篇文章將介紹如何使用Nginx防範LDAP注入攻擊。 LDAP注入攻擊LDAP注入攻擊是一種針對LDAP資料庫的攻擊方式,攻擊者透過在

PHP安全防護:避免注入攻擊 PHP安全防護:避免注入攻擊 Jun 24, 2023 am 09:22 AM

在現今的網路世界中,網路安全問題是一大難題。無論是個人使用者或企業機構都需要對網路系統的安全性格外重視。特別是在網站的開發和維護過程中,注入攻擊是常見的安全漏洞之一。而PHP作為一種在網站開發中廣泛應用的程式語言,更是容易受到注入攻擊。因此,本文將為您介紹PHP安全防護方法,以避免注入攻擊。什麼是注入攻擊?首先,注入攻擊指的是駭客利用網路系統中存在的漏洞

典型網路應用漏洞分析與防範 典型網路應用漏洞分析與防範 Jun 11, 2023 pm 08:36 PM

隨著網路的普及,網路應用的出現越來越多,各種網站、APP、小程式等無所不在。網路應用為我們帶來了便利和娛樂,但同時也帶來了安全隱患。網路應用漏洞的存在,很容易被駭客利用,導致資料外洩、個人資訊被盜、帳戶被盜、網路攻擊等安全問題。本文將從常見的網路應用漏洞入手,分析原因並提供防範措施。 SQL注入漏洞SQL注入漏洞是一種被駭客利用來攻擊資料庫的常見漏洞

Go語言中的跨站點腳本(XSS)攻擊防範:最佳實踐和技巧 Go語言中的跨站點腳本(XSS)攻擊防範:最佳實踐和技巧 Jun 17, 2023 pm 12:46 PM

隨著網路的快速發展,網站安全問題已經成為了網路世界中的一大難題。跨網站腳本(XSS)攻擊是一種常見的安全漏洞,它利用網站的弱點,將惡意腳本注入到網頁中,從而對使用者的資訊進行竊取和篡改。 Go語言作為一種高效、安全的程式語言,為我們提供了強而有力的防範XSS攻擊的工具和技巧。本文將介紹一些最佳實踐和技巧,幫助Go語言開發者有效地預防和解決XSS攻擊。對所有輸入進

Nginx如何防範XML注入攻擊 Nginx如何防範XML注入攻擊 Jun 11, 2023 am 08:20 AM

XML注入攻擊是一種常見的網路攻擊方式,攻擊者將惡意注入的XML程式碼傳遞給應用程序,以取得未經授權的存取權限或執行惡意操作。 Nginx是一款受歡迎的網路伺服器和反向代理伺服器,可以透過多種方式來防範XML注入攻擊。對輸入進行過濾和驗證對於所有輸入到伺服器的數據,包括XML輸入,應該進行過濾和驗證。 Nginx提供了一些內建的模組,可以在代理請求到後端服務之前,對

如何使用Nginx防範apache flag注入攻擊 如何使用Nginx防範apache flag注入攻擊 Jun 10, 2023 pm 03:17 PM

在網路安全領域中,Apache標誌注入攻擊是一種比較常見的攻擊方式,攻擊者在利用某些漏洞或特定的HTTP請求參數來偽造請求標頭,從而欺騙伺服器執行意外的操作或執行惡意程式碼。為了防範這種攻擊,我們可以將Nginx當作反向代理伺服器來處理請求。以下介紹如何使用Nginx防範Apache標誌注入攻擊。設定Nginx反向代理Nginx在處理請求時,可以將請求轉送

防範Java中的跨站請求偽造攻擊 防範Java中的跨站請求偽造攻擊 Aug 07, 2023 am 08:51 AM

防範Java中的跨站請求偽造攻擊近年來,隨著網路的快速發展,網路安全問題也日益凸顯。其中之一就是跨站請求偽造(Cross-SiteRequestForgery,CSRF)攻擊,它是一種利用使用者已登入的身分發動惡意請求的攻擊方式。本文將介紹如何防範Java中的跨站請求偽造攻擊,並給出對應的程式碼範例。什麼是跨站請求偽造攻擊?跨站請求偽造攻擊指的是攻擊者透過

See all articles