日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
GreenSQL助力防止SQL注入攻擊

【.com 獨(dú)家特稿】SQL注入攻擊的危害早已為人所熟知,這種攻擊準(zhǔn)許攻擊者在你的數(shù)據(jù)庫(kù)上執(zhí)行任意的SQL命令。要對(duì)付這種攻擊,我們對(duì)于Web用戶 所提供的任何數(shù)據(jù),不管是通過(guò)HTTP方式,還是通過(guò)CGI參數(shù)方式提供的,都要經(jīng)過(guò)驗(yàn)證,以確保其不包含非法信息。

創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)灌陽(yáng),10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108

這是解決問(wèn)題的根本之道。我們需要一種工具。許多安全機(jī)構(gòu)和人員提出了不少對(duì)付這種攻擊的方法。今天我們看一個(gè)不錯(cuò)的工具GreenSQL,可以說(shuō)它是一個(gè)MySQL數(shù)據(jù)庫(kù)防火墻,可以過(guò)濾SQL注入攻擊。

它位于網(wǎng)站和MySQL數(shù)據(jù)庫(kù)之間,可以決定哪些SQL語(yǔ)句可以執(zhí)行,哪些不應(yīng)當(dāng)執(zhí)行。再加上其Web界面,使得 用戶可以通過(guò)瀏覽器來(lái)管理GreenSQL。GreenSQL的設(shè)計(jì)目的就是用作MySQL數(shù)據(jù)庫(kù)的一個(gè)代理服務(wù)器。它不是將用戶的請(qǐng)求直接連接到MySQL數(shù)據(jù)庫(kù),而是連接到GreenSQL。 GreenSQL將合法的SQL提交給MySQL數(shù)據(jù)庫(kù)并返回結(jié)果。

如果GreenSQL檢測(cè)到一條不屬于白名單并包含惡意SQL的語(yǔ)句,它將阻止此SQL 并返回一個(gè)空結(jié)果,不與MySQL數(shù)據(jù)庫(kù)發(fā)生聯(lián)系。筆者完成此文時(shí),F(xiàn)edora、openSUSE、 Ubuntu 等Linux發(fā)行版本并沒(méi)有包含GreenSQL。

在本文中,筆者將在一臺(tái)64位的Fedora 9計(jì) 算機(jī)上從源代碼安裝greensql-fw 0.8.4。安裝過(guò)程并沒(méi)有使用自動(dòng)化的工具,所以必須手動(dòng)設(shè)置一些東西,如配置文件、系統(tǒng)用戶、MySQL配置、日志文件、/etc/init.d等。 這些過(guò)程在install.txt文件中有明確說(shuō)明,所以并不太費(fèi)力。當(dāng)然,通過(guò)執(zhí)行腳本字典中的幾個(gè)腳本外殼,你也可以完成安裝的不 少內(nèi)容。為編譯應(yīng)用程序,可以簡(jiǎn)單地執(zhí)行“make”,如下所示:

$ tar xzf /.../greensql-fw-0.8.4.tar.gz
$ cd greensql-fw-0.8.4/
$ make
...
connection.hpp:29: error: field 'proxy_event' has incomplete type
connection.hpp:30: error: field 'client_event' has incomplete type

可以看出,在編譯開始后,我們收到了幾個(gè)錯(cuò)誤,這是由于在Fedora 9上安裝時(shí),筆者并沒(méi)有安裝libevent-devel。在安裝好libevent-devel后,又發(fā)現(xiàn)需要修改/usr/include/event.h,為編譯事件代碼,需要將sys/types.h包括進(jìn)去。

vi /usr/include/event.h ... #include 
     
       #include 
      
        #include 
       
         #include 
         
        
       
      
     

在使用“make -k”命令時(shí),有幾個(gè)文件又出現(xiàn)了差錯(cuò),這些文件調(diào)用了字符串函數(shù),如“strcasecmp”,這是由于沒(méi)有包括 string.h頭文件所致。對(duì)讀者來(lái)說(shuō),根據(jù)所使用的gcc的版本的不同,在編譯GreenSQL時(shí),可能會(huì)出現(xiàn)類似或不類似于下面的一些問(wèn) 題:

$ cd src $ vi mysql/mysql_con.cpp ... 
// License: GPL v2 (http://www.gnu.org/licenses/gpl.html) // 
 #include 


     
       #include "mysql_con.hpp" ... 
     
$ vi config.hpp ... #ifndef GREEN_SQL_CONFIG_HPP #define 

GREEN_SQL_CONFIG_HPP #include 
     
       ... 
     
$ vi ../src/parser/expression.hpp ... #ifndef _SQL_EXPRESSION_HPP_ 

#define _SQL_EXPRESSION_HPP_ #include 
     
       ...

     

如果你在一個(gè)64位的發(fā)行版本上編譯GreenSQL,可能還需要稍稍修改Makefile,這樣編譯生成程序才能檢查lib64而不是lib目錄,如 下所示:

$ vi src/Makefile ... 
LIBS:=-L/usr/local/lib -L/usr/local/lib/mysql -L/usr/lib64/mysql -lmysqlclient -levent -lpcre 

greensql-fw: $(OBJS) ... $ make

編譯完成,下面顯示的完成安裝的命令:

greensql-fw-0.8.4]# cd ./scripts/ 
# ./setup_user.sh done... 
# ./greensql-create-db.sh -----------------------------

---------------- The following settings will be used: MySQL admin user: [root] 
MySQL admin password: [] MySQL server 

address: [127.0.0.1] GreenSQL configuration DB name: [greendb] 
DB user to create: [green] 
Password to set: [pwd] Do 

you want to change anything? [y/N] y
MySQL admin user [root]: MySQL admin password []: XXxxXXxxXXxx-FIXME MySQL 

server address (you can use ip:port string) [127.0.0.1]: 
GreenSQL config db name [greendb]: GreenSQL DB user name 

[green]: greendb GreenSQL DB user password [pwd]: greendbpass
 --------------------------------------------- The 

following settings will be used: Do you want to change anything? [y/N] 
Creating MySQL database... 
Adding MySQL user... 
Creating MySQL tables... 
GreenSQL configuration file is not writable!!! Check that [database] section 

contains the following settings in /etc/greensql/greensql.conf [database] 
dbhost=127.0.0.1 dbname=greendb 

dbuser=greendb dbpass=greendbpass # dbport=3306 ... 
# ./setup_conf.sh done... 
# ./setup_log.sh done... # 

./setup_binary.sh done... 
# vi /etc/greensql/greensql.conf ... [database] dbhost=127.0.0.1 dbname=greendb 

dbuser=greendb dbpass=greendbpass ... 
# chkconfig --add greensql service greensql does not support chkconfig # 

/etc/init.d/greensql start

軟件包的install.txt文件描述了手動(dòng)安裝方法,與腳本所使用的命令相同。使用腳本可能更好一些,因?yàn)檫@樣可以提高安裝速度, 而安裝程序基本相同。安裝指南推薦在/etc/greensql目錄之前設(shè)置MySQL數(shù)據(jù)庫(kù),不過(guò)如果你這樣做的話,有可能無(wú)法找到配置文件 ,所以你必須手動(dòng)更改/etc/greensql/greensql.conf文件。你對(duì)greensql.conf作出的唯一主要更改是獲取MySQL數(shù)據(jù)庫(kù)參數(shù)。為測(cè)試需要,筆者創(chuàng)建了一個(gè)稱為“test”的數(shù)據(jù)庫(kù),并允許用戶“ben”自由訪問(wèn),命令如下:

# mysql -p
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql> GRANT ALL ON test.* TO ben@"%";
mysql> FLUSH PRIVILEGES;

默認(rèn)情況下,GreenSQL運(yùn)行在3305端口上,小于MySQL的默認(rèn)端口(3306)。如果你使用mysql控制臺(tái)客戶端并連接到GreenSQL的3305 端口上,你將無(wú)法創(chuàng)建新表。如果你直接通過(guò)3306端口連接到MySQL,就可以創(chuàng)建新表。

$ mysql --verbose  -h  127.0.0.1 -P 3305 test
mysql> create table foo ( id int );
--------------
create table foo ( id int )
--------------
Query OK, 0 rows affected (0.01 sec)
mysql> insert into foo values ( 55 );
--------------
insert into foo values ( 55 )
--------------
ERROR 1146 (42S02): Table 'test.foo' doesn't exist
$ mysql --verbose  -h  127.0.0.1   -P 3306 test
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql> create table foo ( id int );
--------------
create table foo ( id int )
--------------
Query OK, 0 rows affected (0.01 sec)
mysql> insert into foo values ( 55 );
--------------
insert into foo values ( 55 )
--------------
Query OK, 1 row affected (0.00 sec)
mysql> insert into foo values ( 131 );
--------------
insert into foo values ( 131 )
--------------
Query OK, 1 row affected (0.00 sec)
mysql>  select * from foo;
--------------
select * from foo
--------------
+------+
| id   |
+------+
|   55 | 
|  131 | 
+------+
2 rows in set (0.00 sec)

如果使用默認(rèn)配置,你將無(wú)法通過(guò)GreenSQL防火墻丟棄數(shù)據(jù)表。這倒無(wú)妨,因?yàn)楸斫Y(jié)構(gòu)不太可能經(jīng)常改變,更不可能通過(guò)Web界面改 變。

$ mysql --verbose  -h  127.0.0.1   -P 3305 test
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql>  select * from foo;
--------------
select * from foo
--------------
+------+
| id   |
+------+
|   55 | 
|  131 | 
+------+
2 rows in set (0.00 sec)
mysql> drop table foo;
--------------
drop table foo
--------------
Query OK, 0 rows affected (0.00 sec)
mysql>  select * from foo;
--------------
select * from foo
--------------
+------+
| id   |
+------+
|   55 | 
|  131 | 
+------+
2 rows in set (0.01 sec)

注入測(cè)試看來(lái)沒(méi)有如所期望的那樣正常工作。第一次測(cè)試是在條件一直為真時(shí)刪除表。這會(huì)清除表內(nèi)的所有數(shù)據(jù),留下一個(gè)空表。默 認(rèn)地此查詢會(huì)通過(guò)防火墻進(jìn)行:

$ mysql --verbose  -h  127.0.0.1   -P 3305 test
mysql> delete from foo where 1=1;
--------------
delete from foo where 1=1
--------------
Query OK, 2 rows affected (0.00 sec)
mysql>  select * from foo;
--------------
select * from foo
--------------
Empty set (0.00 sec)

對(duì)于上面的SQL刪除命令來(lái)說(shuō),/var/log/greensql.log文件包含了下面的信息:

SQL_DEBUG: QUERY command[]: delete from foo where 1=1
SQL_DEBUG: AFTER NORM   : delete from foo where ?=?
SQL_DEBUG: RISK         : 0

/etc/greensql/greensql.conf文件準(zhǔn)許你設(shè)置某些內(nèi)容的風(fēng)險(xiǎn)程度。例如,你可以將10指定給union關(guān)鍵字使用,或者在查詢中使用 直接的變量比較(如同1=2之類的東西)。這些變量包括“block_level = 30”,所以RISK大于30的任何查詢都不轉(zhuǎn)發(fā)給MySQL服務(wù)器 。為了讓GreenSQL標(biāo)記出上面的查詢,筆者將risk_var_cmp_var 和 risk_always_true從默認(rèn)的30增加至150。但很不幸,這次查詢 看起來(lái)仍是風(fēng)險(xiǎn)為零。

SQL_DEBUG: QUERY command[]: delete from foo where id=181 or 1=1
SQL_DEBUG: AFTER NORM   : delete from foo where id=? or ?=?
SQL_DEBUG: RISK         : 0
SQL_DEBUG: QUERY command[]: delete from s where comment = 'whatever' or '1'='1'
SQL_DEBUG: AFTER NORM   : delete from s where comment = ? or ?=?
SQL_DEBUG: RISK         : 0

筆者做了許多嘗試,結(jié)果都是一樣的,即GreenSQL都將前面的不懷好意的查詢的風(fēng)險(xiǎn)看成是零,筆者又試用了一下SELECT查詢。這竟然 是使GreenSQL工作的一個(gè)關(guān)鍵,即可以阻止惡意查詢,如日志文件的一個(gè)片斷部分所示:

SQL_DEBUG: QUERY command[]: select * from folks where name='sam' or '1'='1'
SQL_DEBUG: AFTER NORM   : select * from folks where name=? or ?=?
DEBUG:     Query has 'or' token
DEBUG:     Variable comparison only
SQL_DEBUG: RISK         : 35

由于select語(yǔ)句中的SQL注入允許用戶在沒(méi)有口令的情況可以登錄進(jìn)入一個(gè)站點(diǎn),讓GreenSQL檢查一下你的select未嘗不是一個(gè)好主 意。不過(guò),筆者希望GreenSQL的未來(lái)版本可以將保護(hù)擴(kuò)展到delete語(yǔ)句,因?yàn)樗梢郧宄麄€(gè)數(shù)據(jù)表。

【.COM 獨(dú)家特稿,轉(zhuǎn)載請(qǐng)注明出處及作者!】


網(wǎng)站題目:GreenSQL助力防止SQL注入攻擊
網(wǎng)頁(yè)URL:http://m.5511xx.com/article/coigdcs.html