国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于教學中的MySQL數(shù)據(jù)庫訪問和安全問題探討

2020-07-09 23:28:53周小麗
現(xiàn)代信息科技 2020年21期
關(guān)鍵詞:安全問題

摘 ?要:在實際教學中,MySQL數(shù)據(jù)庫被經(jīng)常應用于中小型網(wǎng)站或者系統(tǒng)開發(fā)。以一個基于B/S架構(gòu)的教務管理系統(tǒng)為例,對數(shù)據(jù)庫的訪問方式進行了研究。其中PHP連接數(shù)據(jù)庫無須使用連接池,連接速度較快;Java在連接和關(guān)閉數(shù)據(jù)庫時,JDBC連接較慢,若采用一些持久層框架,那么訪問數(shù)據(jù)庫效率增加。為減少SQL注入攻擊,可在數(shù)據(jù)庫設(shè)計時考慮存儲程序設(shè)計思想等。

關(guān)鍵詞:MySQL;PHP;Java;安全問題

中圖分類號:TP311.13;TP309 ? ? 文獻標識碼:A 文章編號:2096-4706(2020)21-0144-04

Discussion on MySQL Database Access and Security Issue Based on Teaching

ZHOU Xiaoli

(Sichuan Top IT Vocational Institute,Chengdu ?611743,China)

Abstract:In practical teaching,MySQL database is often used in small and medium-sized websites or system development. Taking an educational administration management system based on B/S architecture as an example,the method of database access is studied. Among them,PHP does not need to use the connection pool to connect to the database,so the connection speed is faster;when Java connects and closes the database,JDBC connection is slower,if some persistence layer framework is adopted,the efficiency of accessing the database will be increased. In order to reduce SQL injection attacks,we can consider the idea of storage program design in database design.

Keywords:MySQL;PHP;Java;security issue

0 ?引 ?言

四川托普信息技術(shù)職業(yè)學院立足區(qū)域經(jīng)濟社會發(fā)展需求,主動對接四川省支柱產(chǎn)業(yè),努力打造“信息技術(shù)”特色,其中軟件技術(shù)專業(yè)是省點專業(yè),以培養(yǎng)軟件開發(fā)類、Web應用類、測試類人才為目標。在教授軟件開發(fā)類課程時,例如網(wǎng)站開發(fā)或者系統(tǒng)開發(fā)時,通常涉及前端、服務器、數(shù)據(jù)庫等幾個方面,其中數(shù)據(jù)庫是存儲、查閱數(shù)據(jù)的倉庫,經(jīng)常使用MySQL數(shù)據(jù)庫來進行教學演示。MySQL作為關(guān)系型數(shù)據(jù)庫管理系統(tǒng)的代表,語法簡單、標準、體積小,是學院主要教授的數(shù)據(jù)庫技術(shù),易于被學生接受。學生普遍反應學習相對容易上手,且能舉一反三。以下圍繞一個基于B/S架構(gòu)的教務管理系統(tǒng)探討數(shù)據(jù)庫的訪問方式和安全問題。

開發(fā)一個教務管理系統(tǒng),主要是為了將過去的前往政教處遞交各種報告的教學申請流程逐漸轉(zhuǎn)變成為網(wǎng)絡教務教學管理系統(tǒng),實現(xiàn)從傳統(tǒng)教務管理方式到網(wǎng)絡教務管理方式的過渡。教務管理系統(tǒng)一般采用瀏覽器/服務器(Browser/Server,B/S)軟件架構(gòu)方式,由服務端與瀏覽器端組成,同時由于采用B/S模式,可以實現(xiàn)使用瀏覽器進行訪問,減少了需要下載特定客戶端的麻煩,提高了系統(tǒng)的多平臺性,通常前端采用HTML、CSS、JavaScript及EasyUI、Bootstrap框架實現(xiàn),可以滿足主流瀏覽器的兼容。服務端采用PHP語言開發(fā)或者Java語言開發(fā),數(shù)據(jù)庫采用MySQL。其中教務管理系統(tǒng)的整體結(jié)構(gòu)框架如圖1所示。

教務管理系統(tǒng)包含管理員、學生和教師三個模塊。其中管理員模塊有管理管理員、管理學生、管理教師、管理系、部等功能;學生模塊有查詢、個人信息、考試、成績等功能;教師模塊有查詢、登錄成績、查詢成績等功能。這些都需要大量的數(shù)據(jù),都用數(shù)據(jù)庫進行存儲,以下介紹兩種訪問數(shù)據(jù)庫的方式。

1 ?使用PHP訪問MySQL數(shù)據(jù)庫

PHP作為一種跨平臺的動態(tài)網(wǎng)站服務端腳本語言,可在Windows、Linux等多種平臺上運行,支持MySQL數(shù)據(jù)庫訪問?;贐/S架構(gòu)的教務管理系統(tǒng),服務端以PHP作為開發(fā)語言,目前高版本通過MySQLi面向?qū)ο蠓绞竭B接數(shù)據(jù)庫,以下給出主要的PHP訪問數(shù)據(jù)庫的代碼:

<?php

session_start();

$conn = new mysqli("localhost","root","root","easyui");//連接數(shù)據(jù)庫

$manager=$_POST["manager"];

$password=$_POST["password"];

$sql="select * from easyui_admin where manager= '$manager' and password='$password' LIMIT 1";//查詢語句

$result = $conn -> query($sql); //連接查詢sql語句

if(??!mysqli_fetch_array($result,MYSQLI_ASSOC)){//判斷連接狀態(tài)

$_SESSION['admin']=$manager;

echo 1;//連接成功

}else{

echo 0;//連接失敗

}

?>

上述給出了數(shù)據(jù)庫連接,定義變量,創(chuàng)建查詢語句,連接查詢語句,最后判斷連接狀態(tài)過程。PHP操作數(shù)據(jù)庫是實現(xiàn)數(shù)據(jù)庫的增加、刪除、修改、查詢,PHP中MySQLi創(chuàng)建查詢語句如下:

$sql = "CREATE TABLE STUDENT ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(10) NOT NULL, lastname VARCHAR(10) NOT NULL, email VARCHAR(20) )";

插入查詢語句、插入多余數(shù)據(jù)等如下:

$sql = "INSERT INTO STUDENT (firstname, lastname, email) VALUES ('Wang', 'Wu', 'WangWu@qq.com')";

$sql = "INSERT INTO STUDENT (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com');";

$sql .= "INSERT INTO STUDENT (firstname, lastname, email) VALUES ('Zhang', 'San', 'ZhangSan@qq.com');";

$sql .= "INSERT INTO STUDENT (firstname, lastname, email) VALUES ('Li', 'Si', 'LiSi@qq.com')";

PHP通常也考慮預處理語句,它用于執(zhí)行多個相同的SQL語句,并且執(zhí)行效率更高。預處理語句通過預處理、數(shù)據(jù)庫解析、編譯,對SQL語句模板執(zhí)行查詢優(yōu)化,并存儲結(jié)果不輸出執(zhí)行,最后,將應用綁定的值傳遞給參數(shù),數(shù)據(jù)庫執(zhí)行語句。預處理語句對于防止MySQL注入是非常有用的,因為參數(shù)值發(fā)送后使用不同的協(xié)議,保證了數(shù)據(jù)的合法性。

從上述PHP訪問數(shù)據(jù)庫可以看出,PHP操控數(shù)據(jù)庫的語句特點是:語法簡潔,不需要聲明太多的類型,直接調(diào)用。操縱數(shù)據(jù)庫過程其實就是使用了原始的SQL的語句,然后用PHP執(zhí)行語句,并且返回對應的數(shù)據(jù)結(jié)構(gòu),無需連接池,直接連接前后端,完成教務管理系統(tǒng)設(shè)計與實現(xiàn),因此PHP連接數(shù)據(jù)庫非??欤阅芨?。

2 ?Java訪問數(shù)據(jù)庫

Java是一門面向?qū)ο缶幊陶Z言,整體語法簡潔,吸收了C語言的各種優(yōu)點,摒棄了C語言里難以理解的多繼承、指針等概念,Java語言整體功能強大、簡單、易學易用。開發(fā)此教務管理系統(tǒng),以Java語言作為后端開發(fā)語言,也能極好地實現(xiàn)面向?qū)ο罄碚摚诮虒W中,可使學生理解編程過程,實現(xiàn)基本功能。采用Java連接MySQL,Java具有堅固、安全、易于使用、易于理解和從網(wǎng)絡上自動下載等特性,是編寫數(shù)據(jù)庫應用程序的一個不錯的選擇。以下介紹為Java連接數(shù)據(jù)庫的通用方法:

(1)用JDBC連接MySQL數(shù)據(jù)庫主要代碼為:

public static Connection getConnection(String user, String pass) {

Connection conn = null;//聲明連接對象

String driver = "com.mysql.jdbc.Driver";// 驅(qū)動程序類名

String url = "jdbc:mysql://localhost:3306/test?" // 數(shù)據(jù)庫URL

+ "useUnicode=true&characterEncoding=UTF8";// 防止亂碼

try {

Class.forName(driver);// 注冊(加載)驅(qū)動程序

conn = DriverManager.getConnection(url, user, pass);// 獲取數(shù)據(jù)庫連接

} catch (Exception e) {

e.printStackTrace();

}

return conn;

}

// 釋放數(shù)據(jù)庫連接

public static void releaseConnection(Connection conn) {

try {

if (conn != null)

conn.close();

} catch (Exception e) {

e.printStackTrace();

}

}

JDBC連接數(shù)據(jù)庫整合項目,如圖2所示。

但是使用JDBC操作數(shù)據(jù)庫也存在不足:頻繁開啟數(shù)據(jù)庫鏈接、關(guān)閉數(shù)據(jù)庫鏈接、消耗大量資源、連接速度相較于PHP較慢。因為其經(jīng)常需要建立和維護連接池,消耗一些內(nèi)存,所以實際的開發(fā)應用中,對于普遍的JDBC適合只要求普通程序開發(fā),不用長期維護代碼,但是不適合數(shù)據(jù)庫的遷移。

(2)運用MyBatis框架訪問數(shù)據(jù)庫。在實際開發(fā)應用中,開發(fā)者常常使用一些封裝好的框架(DAO層),可以極大地提高性能,降低資源消耗,例如MyBatis、Spring MVC、Spring Boot等框架訪問MySQL數(shù)據(jù)庫。MyBatis是一款優(yōu)秀的持久層框架,它支持定制化SQL、存儲過程以及高級映射,使用MyBatis框架的好處就是,不用再寫麻煩的DAO包,操作數(shù)據(jù)庫的代碼大大簡化,新建項目,然后導入MyBatis框架包和連接數(shù)據(jù)庫的連接包,使用JDBC新建數(shù)據(jù)庫連接.properties文件,注意這個文件中只能有等號這個特殊字符,不能有引號或者逗號。在完成的教務管理系統(tǒng)中,采用MyBatis框架訪問數(shù)據(jù)庫,首先創(chuàng)建SSM數(shù)據(jù)庫和相應的people,然后新建一個XML文件,連接數(shù)據(jù)庫:

通過新建xml配置文件,然后創(chuàng)建對應數(shù)據(jù)庫的POJO,接著創(chuàng)建Mapper接口和對應的mapper.xml配置文件,最后在mapper.xml映射文件的配置,很多工作就在xml配置文件中完成。實現(xiàn)上述操作的代碼如下所示:

目前,用Java開發(fā)企業(yè)Web項目或者系統(tǒng),教學中經(jīng)常會將Spring、SpringMVC、MyBatis合并使用,搭建數(shù)據(jù)庫框架。如果數(shù)據(jù)量很大,一個MySQL庫存儲數(shù)據(jù)訪問效率很低,往往會采用分庫存儲管理的方式,采用多線程來提升數(shù)據(jù)庫的訪問效率。

3 ?關(guān)于數(shù)據(jù)庫訪問安全問題的探討

在設(shè)計應用系統(tǒng)或者網(wǎng)站時,我們還需要考慮SQL注入,SQL注入是Web網(wǎng)站排名的一種常見的安全漏洞,在教學過程中,適當?shù)刂v解SQL注入的相關(guān)原理和運用,對于Web網(wǎng)站開發(fā)和應用具有非常重要的意義。SQL注入即把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執(zhí)行惡意指令的SQL命令,相當于通過SQL語句惡意地調(diào)用后臺數(shù)據(jù)庫。具體來說,它是利用現(xiàn)有應用程序,將惡意的SQL命令注入后臺數(shù)據(jù)庫引擎執(zhí)行的能力,通過在Web表單中輸入惡意SQL語句得到一個存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫,而不是按照設(shè)計者意圖去執(zhí)行SQL語句。攻擊者通過在應用程序預先定義好類(應用程序一般是Web應用程序,它允許用戶輸入查詢條件),并將查詢條件嵌入SQL語句中,提交到數(shù)據(jù)庫中執(zhí)行。通過構(gòu)建畸形SQL語句,攻擊者能夠獲取額外的信息數(shù)據(jù)。通過用戶提供的參數(shù)來查詢表中的數(shù)據(jù),我們進行一個網(wǎng)站登錄界面測試,如在輸入“1”時,發(fā)現(xiàn)報錯了,說明有語法錯誤,可以在輸入框id構(gòu)造的查詢?nèi)缦拢?/p>

Select firstname,surname from users where id=1;

當我們在1之后加一個引號,那么查詢語句會變成這樣:

Select firstname,surname from users where id=1;

由此可以看出,這里的單引號不匹配,查詢語句有問題??梢酝ㄟ^滲透測試sqlmap進行測試,通過邊演示邊讓學生操作的方式,在Kali中打開終端,輸入命令“sqlmap -u ‘http://192.168.0.3/dvwa/vulnerabilities/sqli/?id= 1&Submit= Submit#' --Cookie=‘security=low;PHPSESSID=gaqenatrtudmob23522r97jrt7”,進行掃描,如圖3所示。

圖3可以獲得瀏覽器獲得Cookie信息,說明URL中的id參數(shù)存在著SQL注入點,還可以進一步探測數(shù)據(jù)庫的名稱、密碼、表和表的字段、實現(xiàn)對數(shù)據(jù)庫的破解,如圖4所示。

在教學過程中,發(fā)現(xiàn)學生如果MySQL基礎(chǔ)較好,就能夠很容易理解,部分學生MySQL基礎(chǔ)較差,理解起來較難,可嘗試運用對比的方法進行教學。學生復習了MySQL中數(shù)據(jù)庫、表的創(chuàng)建、數(shù)據(jù)庫的增加、插入、修改、查詢等基礎(chǔ)知識和Java Web的JavaScript、cookie等專業(yè)知識,以教務管理系統(tǒng)為例,演示登錄界面的制作、運用,在教學中結(jié)合前端JavaScript、Cookie網(wǎng)頁和Java EE后臺登錄界面設(shè)計相關(guān)知識,詳細演示了黑客進行SQL注入的相關(guān)過程,運用了一種滲透測試工具——sqlmap工具進行測試,通過邊演示邊讓學生操作的方式,理解SQL注入過程,對于Web開發(fā)具有非常重要的意義。通過類比方法進行教學,學生的思路更加清晰,進一步加深了學習的知識,提高了探索的興趣,對于后續(xù)相關(guān)的工作和學習奠定了基礎(chǔ),將所學知識全面應用起來,提高學生的知識可遷移能力。通過實際案例演示讓學生明白了SQL注入過程,除了sqlmap等滲透測試工具測試漏洞,構(gòu)造shell語句,還可以通過以下的方法在一定程度上降低SQL注入的危險。

在數(shù)據(jù)查詢存取時可以采用參數(shù)化的SQL或者直接使用存儲過程。SQL參數(shù)的傳遞過程中涉及單引號和連字符等,可以通過在數(shù)據(jù)庫設(shè)計時,嚴格按照存儲過程的規(guī)則,對于預防注入攻擊具有顯著的效果;由于Web系統(tǒng)前端網(wǎng)頁中,攻擊者容易獲得網(wǎng)頁的前端源代碼,通過修改驗證合法性的腳本(或者直接刪除腳本),然后將非法內(nèi)容通過修改后的表單提交給服務器,制作釣魚網(wǎng)站,即通過制作模擬網(wǎng)站,獲得用戶的個人信息(含銀行卡賬號等信息),將會帶來巨大的安全隱患??梢酝ㄟ^采用正則表達式或者通過驗證的數(shù)據(jù),結(jié)合數(shù)字簽名或者哈希函數(shù)等進行加密,通過對密碼等敏感信息進行加密,并進行過濾,當攻擊者或者黑客在進行攻擊時,對密碼進行暴力破解難度非常大,對于黑客攻擊有一定的防止作用。

4 ?結(jié) ?論

在高職院校教學中,基于Web開發(fā)的應用越來越普遍,對海量的數(shù)據(jù)實現(xiàn)保存、新建、存儲、修改等,數(shù)據(jù)庫應運而生;講授Web類開發(fā)教學過程中,如一個教務管理系統(tǒng),前端采用HTML、CSS、JavaScript及EasyUI或Bootstrap框架,服務器端以PHP或者Java兩種語法為主要編程語言,兩者的連接方式不同、連接速度不同、連接性能也存在差異,PHP因為其語法的簡潔,在不考慮IO性能的基礎(chǔ)上,無須使用連接池和維護連接池,連接數(shù)據(jù)庫相較于Java更快,Java主要慢在連接和關(guān)閉數(shù)據(jù)庫。JDBC在第一次連接數(shù)據(jù)庫時會動態(tài)加載驅(qū)動,非常耗時,因此使用Java要記住使用數(shù)據(jù)庫連接池,避免連接浪費大量時間。當然,這也造成了數(shù)據(jù)庫的負擔,勢必影響內(nèi)存占用,但是創(chuàng)建隨機數(shù)的算法實現(xiàn)各不相同,所以不具備可比性。在Web應用程序后續(xù)開發(fā)類課程階段,嘗試通過類比方式,融合MySQL基礎(chǔ)、JavaScript、Cookie網(wǎng)頁和Java EE等專業(yè)知識,運用sqlmap等滲透測試工具,讓學生深刻理解了SQL注入的相關(guān)過程,加深了對知識的理解,在數(shù)據(jù)庫設(shè)計階段,如注重存儲程序設(shè)計思想等,對于Web網(wǎng)站或者系統(tǒng)等開發(fā)項目具有一定的積極意義。

參考文獻:

[1] 汪曉青.MySQL數(shù)據(jù)庫基礎(chǔ)實例教程 [M].北京:人民郵電出版社,2020.

[2] 黑馬程序員.PHP網(wǎng)站開發(fā)實例教程:第2版 [M].北京:人民郵電出版社,2020.

[3] 圣文順,李曉明,劉進芬.Java Web程序設(shè)計及項目實戰(zhàn):微課視頻版 [J].北京:清華大學出版社,2020.

[4] 金濤,張啟翔.基于SQL注入的Web滲透技術(shù)取證方法的研究 [J].網(wǎng)絡空間安全,2017,8(Z3):55-58.

作者簡介:周小麗(1988.05—),女,漢族,四川成都人,助理研究員,教師,本科,學士學位,研究方向:計算機技術(shù)。

猜你喜歡
安全問題
高校計算機安全防范措施研究
有關(guān)計算機網(wǎng)絡安全問題的分析與探討
輸變電設(shè)備運行及安全防范措施
中國市場(2016年36期)2016-10-19 04:01:46
淺談煤礦瓦斯的安全管理
平定县| 新津县| 连江县| 永胜县| 合阳县| 蕉岭县| 巩义市| 和静县| 修武县| 石林| 永安市| 旺苍县| 桐梓县| 灵丘县| 新邵县| 稻城县| 尼玛县| 大竹县| 日土县| 松滋市| 永康市| 马边| 班玛县| 县级市| 晴隆县| 泰顺县| 西吉县| 京山县| 清徐县| 招远市| 湛江市| 临猗县| 浠水县| 堆龙德庆县| 兰溪市| 平阴县| 理塘县| 云南省| 周宁县| 客服| 深圳市|