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的信息。注意,只有�

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530121.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530121.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530121.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle12081,【Oracle介質】Oracle 12C Linux x86-64 最新OPatch patch 6880880 12.2.0.1.7

天萃荷凈Linux x86-64 補丁程序6880880: OPatch patch of version 12.2.0.1.7 for Oracle software releases 12.1.0.x (installer) and 12.2.0.x (AUG 2016)上次更新時間 2016-8-26 上午1:48 (8 天前)產品 Oracle Global Lifecycle Management OPatc…

如何使用oracle ebs,Oracle EBS進行集成的實際操作步驟

我們今天主要向大家介紹的是如何使用WebService和Oracle EBS進行集成,以及在使用WebService和Oracle EBS進行集成時,所需要的一些項目的描述,以下的文章就是對相關內容的描述。架構系統從總體上分為兩部分,一部為企業的EBS及接口系…

linux nls_lang oracle,linux操作系統環境變量LANG和NLS_LANG的區別

例如:復制代碼代碼如下:export LANGzh_CN.GB2312export NLS_LANGAMERICAN_AMERICA.ZHS16GBK$export LANGzh_CN.GB2312$date2012年 11月 27日 星期二 16:20:35 CST顯示是中文界面。復制代碼代碼如下:$export NLS_LANGAMERICAN_AMERICA.ZHS16GBK$sqlplus / as sysdbaS…

oracle監聽 3個配置文件,Oracle 11g 監聽 配置修改 說明

這里我們看2個比較常用的操作。1. 停止寫listener log在某些特定的場合可能會有這樣的需求。控制這個功能的參數是LOG_STATUS。 官網對這個參數的說明:To turn listenerlogging on or off.--在OS層面直接使用:lsnrctl SET LOG_STATUS {on | off}--在LSNR…

suse linux如何重置密碼忘記,SUSE?Linux忘記root密碼的處理辦法

GRUB修改法注意:此辦法僅適用SLES8、SLES9,不適用于SLES10,SLES10請用光盤修改法。此辦法不適合用于grub啟動超時時間為0的機器,因為grub超時時間設置為0后,不能編輯grub選項,此類機器必須使用光盤或網絡引…

linux怎么啟動端口服務,Linux 根據端口快速停止服務并啟動的辦法

ll /proc/7167結果為:[rootcentos76 deploy]# ll /proc/7167total 0dr-xr-xr-x 2 root root 0 Jun 25 11:13 attr-rw-r--r-- 1 root root 0 Jun 25 11:13 autogroup-r-------- 1 root root 0 Jun 25 11:13 auxv-r--r--r-- 1 root root 0 Jun 25 11:05 cgroup--w------- 1 root …

linux進程增刪改查,iptables的增刪改查

iptables是自帶的防火墻,功能強大,學習起來需要一段時間,下面是一些習iptables的時候的記錄。如果iptables不熟悉的話可以用apf,是一款基于iptables的防火墻,挺好用的。一,安裝并啟動防火墻[root ~]# /etc/init.d/ipta…

重裝系統 linux啟動windows系統文件在哪里,Win-Lin雙系統重裝Windows找回Linux啟動

第一系統Windows,第二系統Linux:Ubuntu18.10;1. 重新安裝Windows系統后,使用Ubuntu的安裝光盤,或啟動U盤啟動電腦;2. 選擇:Try Ubuntu ;3. 進入Ubuntu界面,打開命令行終端(Ctrl Alt…

linux遠程監控畢業設計,畢業設計論文:基于嵌入式Linux遠程監控系統的設計與實現.doc...

摘 要可編程邏輯控制器(PLC)不僅在工業控制中應用越來越廣泛,而且在其他領域的應用也逐漸擴大,例如:電力、化工、能源、水利等。由于它的功能比較強大、使用安全可靠、維護簡單方便的優點,在很多地方已經取代了繼電器電路的邏輯控…

linux卡死在選擇內核界面,求助:am3352 linux內核啟動時卡在 Starting kernel ...

這是用光盤里的uImage的輸出信息:U-Boot# tftp 0x82000000 bakuImagelink up on port 0, speed 100, full duplexUsing cpsw deviceTFTP from server 192.168.0.231; our IP address is 192.168.0.224Filename bakuImage.Load address: 0x82000000Loading: ########…

u盤分為windows和linux啟動,【電腦軟件】Ventoy 官方版,一個U盤,同時擁有啟動win+linux+Ubuntu...

軟件介紹:Ventoy是一個制作可啟動U盤的開源工具。有了Ventoy你就無需反復地格式化U盤,你只需要把ISO文件拷貝到U盤里面就可以啟動了,無需其他操作。 你可以一次性拷貝很多個不同類型的ISO文件,在啟動時Ventoy會顯示一個菜單來選擇…

linux cpu頻率軟件,linux cpu頻率控制

安裝cpufrequtils: sudo apt-get install cpufrequtils查看cpu: sudo cpufreq-info設置cpu模式: cpufreq-set -g {powersave, userspace, ondemand, conservative, performance}對應于{最省電(最低頻率)&#xff0…

linux var 空間不足,/var空間不足怎么辦?(求安全保險的方法)

最近想把Ubuntu從12.04升級到13.10,可/var目錄下的空間不足,怎么處理這個問題?提示需要850M多的空間,可從以下的信息來看,里面的東西我幾乎是沒得刪除了。# du -h --max-depth1 /var92K /var/crash4.0K /var/local4.0K…

linux 權限測試,linux下檢測root權限的shell腳本

個人心血來潮時寫的一個腳本,比較粗糙,功能也很簡單,大家有興趣的可以拿去改改。本腳本之爭對系統中UID為0的用戶#!/bin/bash #大家都知道echo test my computer is or not safety #顯示“ test my computer is or not saf…

嵌入式linux 網絡喚醒,C語言實現wake on lan(網絡喚醒...-Windows系統下用命令行編譯C/C++...-字符串常量引起的思考_169IT.COM...

前一段時間在自學linux系統,想模仿linux命令行的方式在Windows下編譯C/C程序,摸索一段時間后總算把這個解決了!(1)先用記事本編寫如下所示的代碼,并另存為hello.cpp,假設其保存路徑為C:\Users\Administrator\Desktop。…

linux更新函數,linux系統不同對象升級方法詳細介紹

當我們使用Linux一段時間以后,自然不會滿足總是在沒有任何變化的系統中工作,而是渴望能象在Windows系統中一樣,不斷對自己的Linux進行升級。另一方面,Linux本身就是一個開放的系統,每天都會有新的軟件出現,…

linux7 3怎么修改mac地址,Ubuntu 16.04修改MAC地址以及網絡常用設置

1、先停止桌面版自帶的NetworkManager,這東西很難用,且有些設置需要重啟。sudo systemctl stop NetworkManager.servicesudo systemctl disable NetworkManager.service2、設置MAC地址在幫助文檔中應該找這個關鍵字:hardware address&#xf…

Linux刻錄光盤win10認不到,Win10無法讀取DVD光驅和刻錄光盤怎么辦 Win10不能讀取DVD光驅和刻錄光盤解決方法...

近來,有位win10系統用戶反映自己的電腦因為沒有安裝殺毒軟件,而使電腦中了病毒,導致自己的DVD光驅不能使用,出現了無法讀取光盤資料也無法刻錄光盤的問題,而且DVD光驅顯示的是CD驅動器。這該怎么辦呢?下面&…

linux查看文件位置命令bwd,linux 操作系統中find文件搜索命令的使用

文件搜索命令是:find命令所在路徑是:/bin/find執行權限:所有用戶語法:find [搜索范圍] [匹配條件]范例:find /etc -name init 這個是比較精準的要找文件的find /etc -name *init* 這個模糊的查找的,只有有init這幾個…

linux 定時執行攪拌,Linux上定時shell腳本

本文主要介紹在Linux系統上部署定時器,定時執行shell腳本,通過腳本執行sql文件sql文件-- 創建表create table if not exists iot_test.iot_tac(MSISDN string,TAC string)partitioned by(day string)row format delimitedfields terminated by \tlines t…