日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php阻止输入sql,在PHP中全面阻止SQL注入式攻击之三

發布時間:2025/3/8 php 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php阻止输入sql,在PHP中全面阻止SQL注入式攻击之三 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、 建立一個安全抽象層

我們并不建議你手工地把前面介紹的技術應用于每一個用戶輸入的實例中,而是強烈推薦你為此創建一個抽象層。一個簡單的抽象是把你的校驗方案加入到一個函數中,并且針對用戶輸入的每一項調用這個函數。當然,我們還可以創建一種更復雜的更高一級的抽象-把一個安全的查詢封裝到一個類中,從而應用于整個應用程序。在網上已經存在許多這種現成的免費的類;在本篇中,我們正要討論其中的一些。

進行這種抽象至少存在三個優點(而且每一個都會改進安全級別):

1. 本地化代碼。

2. 使查詢的構造更快且更為可靠-因為這可以把部分工作交由抽象代碼來實現。

3. 當基于安全特征進行構建并且恰當使用時,這將會有效地防止我們前面所討論的各種各樣的注入式攻擊。

二、 改進現有的應用程序

如果你想改進一個現有的應用程序,則使用一個簡單的抽象層是最適當的。一個能夠簡單地"清理"你所收集的任何用戶輸入內容的函數可能看起來如下所示:

function safe( $string ) {

return "'" . mysql_real_escape_string( $string ) . "'"

}

【注意】我們已經構建了相應于值要求的單引號以及mysql_real_escape_string()函數。接下來,就可以使用這個函數來構造一個$query變量,如下所示:

$variety = safe( $_POST['variety'] );

$query = " SELECT * from wines WHERE variety=" . $variety;

現在,你的用戶試圖進行一個注入式攻擊-通過輸入下列內容作為變量$variety的值:

lagrein' or 1=1;

注意,如果不進行上面的"清理",則最后的查詢將如下所示(這將導致無法預料的結果):

SELECT * from wines WHERE variety = 'lagrein' or 1=1;'

然而現在,既然用戶的輸入已經被清理,那么查詢語句就成為下面這樣一種無危害的形式:

SELECT * from wines WHERE variety = 'lagrein\' or 1=1\;'

既然數據庫中不存在與指定的值相應的variety域(這正是惡意用戶所輸入的內容-lagrein' or 1=1;),那么,這個查詢將不能返回任何結果,并且注入將會失敗。

三、 保護一個新的應用程序

如果你正在創建一個新的應用程序,那么,你可以從頭開始創建一個安全抽象層。如今,PHP 5新改進的對于MySQL的支持(這主要體現在新的mysqli擴展中)為這種安全特征提供了強有力的支持(既有過程性的,也有面向對象特征的)。你可以從站點http://php.net/mysqli上獲取有關mysqli的信息。注意,只有�

總結

以上是生活随笔為你收集整理的php阻止输入sql,在PHP中全面阻止SQL注入式攻击之三的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。