PHP与SQL注入攻击防范小技巧_PHP
下面来谈谈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% 这样的查询语句失效。

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

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

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

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

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

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

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

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

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