PHP代碼網(wǎng)站如何防范SQL注入漏洞攻擊建議分享
Jun 13, 2016 pm 12:02 PM
黑客通過SQL注入攻擊可以拿到網(wǎng)站數(shù)據(jù)庫的訪問權(quán)限,之后他們就可以拿到網(wǎng)站數(shù)據(jù)庫中所有的數(shù)據(jù),惡意的黑客可以通過SQL注入功能篡改數(shù)據(jù)庫中的數(shù)據(jù)甚至?xí)褦?shù)據(jù)庫中的數(shù)據(jù)毀壞掉。做為網(wǎng)絡(luò)開發(fā)者的你對這種黑客行為恨之入骨,當(dāng)然也有必要了解一下SQL注入這種功能方式的原理并學(xué)會(huì)如何通過代碼來保護(hù)自己的網(wǎng)站數(shù)據(jù)庫。今天就通過PHP和MySQL數(shù)據(jù)庫為例,分享一下我所了解的SQL注入攻擊和一些簡單的防范措施和一些如何避免SQL注入攻擊的建議。
什么是SQL注入(SQL Injection)?
簡單來說,SQL注入是使用代碼漏洞來獲取網(wǎng)站或應(yīng)用程序后臺的SQL數(shù)據(jù)庫中的數(shù)據(jù),進(jìn)而可以取得數(shù)據(jù)庫的訪問權(quán)限。比如,黑客可以利用網(wǎng)站代碼的漏洞,使用SQL注入的方式取得一個(gè)公司網(wǎng)站后臺數(shù)據(jù)庫里所有的數(shù)據(jù)信息。拿到數(shù)據(jù)庫管理員登錄用戶名和密碼后黑客可以自由修改數(shù)據(jù)庫中的內(nèi)容甚至刪除該數(shù)據(jù)庫。SQL注入也可以用來檢驗(yàn)一個(gè)網(wǎng)站或應(yīng)用的安全性。SQL注入的方式有很多種,但本文將只討論最基本的原理,我們將以PHP和MySQL為例。本文的例子很簡單,如果你使用其它語言理解起來也不會(huì)有難度,重點(diǎn)關(guān)注SQL命令即可。
一個(gè)簡單的SQL注入攻擊案例
假如我們有一個(gè)公司網(wǎng)站,在網(wǎng)站的后臺數(shù)據(jù)庫中保存了所有的客戶數(shù)據(jù)等重要信息。假如網(wǎng)站登錄頁面的代碼中有這樣一條命令來讀取用戶信息。
復(fù)制代碼 代碼如下:
$q = "SELECT `id` FROM `users` WHERE `username`= ' " .$_GET['username']. " ' AND `password`= ' " .$_GET['password']. " ' ";
?>
現(xiàn)在有一個(gè)黑客想攻擊你的數(shù)據(jù)庫,他會(huì)嘗試在此登錄頁面的用戶名的輸入框中輸入以下代碼:
' ; SHOW TABLES;
點(diǎn)擊登陸鍵,這個(gè)頁面就會(huì)顯示出數(shù)據(jù)庫中的所有表。如果他現(xiàn)在使用下面這行命令:
'; DROP TABLE [table name];
這樣他就把一張表刪除了!
當(dāng)然,這只是一個(gè)很簡單的例子,實(shí)際的SQL注入方法比這個(gè)要復(fù)雜得多,黑客也愿意花大量的時(shí)間來不斷嘗試來攻擊你的代碼。有一些程序軟件也可以自動(dòng)地來不斷嘗試SQL注入攻擊。了解了SQL注入的攻擊原理后,我們來看一下如何防范SQL注入攻擊。
防范SQL注入 - 使用mysql_real_escape_string()函數(shù)
在數(shù)據(jù)庫操作的代碼中用這個(gè)函數(shù)mysql_real_escape_string()可以將代碼中特殊字符過濾掉,如引號等。如下例:
復(fù)制代碼 代碼如下:
$q = "SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ). " ' AND `password`= ' " .mysql_real_escape_string( $_GET['password'] ). " ' ";
?>
防范SQL注入 - 使用mysql_query()函數(shù)
mysql_query()的特別是它將只執(zhí)行SQL代碼的第一條,而后面的并不會(huì)執(zhí)行?;叵朐谧钋懊娴睦又?,黑客通過代碼來例后臺執(zhí)行了多條SQL命令,顯示出了所有表的名稱。所以mysql_query()函數(shù)可以取到進(jìn)一步保護(hù)的作用。我們進(jìn)一步演化剛才的代碼就得到了下面的代碼:
復(fù)制代碼 代碼如下:
//connection
$database = mysql_connect("localhost", "username","password");
//db selection
mysql_select_db("database", $database);
$q = mysql_query("SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ). " ' AND `password`= ' " .mysql_real_escape_string( $_GET['password'] ). " ' ", $database);
?>
除此之外,我們還可以在PHP代碼中判斷輸入值的長度,或者專門用一個(gè)函數(shù)來檢查輸入的值。所以在接受用戶輸入值的地方一定要做好輸入內(nèi)容的過濾和檢查。當(dāng)然學(xué)習(xí)和了解最新的SQL注入方式也非常重要,這樣才能做到有目的的防范。如果使用的是平臺式的網(wǎng)站系統(tǒng)如Wordpress,要注意及時(shí)打上官方的補(bǔ)丁或升級到新的版本。如果有講得不對的地方或不理解的請?jiān)谠u論區(qū)留言。

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

PhphasthreecommentStyles: //,#forsingle-lineand/.../formulti-line.usecommentstoexplainwhycodeexists ,notwhatitdoes.marktodo/fix MeitemsanddisableCodeTemporaryDuringDebugging.avoidover-CommentingsImpleLogic.writeConcise, GrammaticallyCorrectcommentsandu

Langkah -langkah utama untuk memasang PHP pada Windows termasuk: 1. Muat turun versi PHP yang sesuai dan menyahpepijatnya. Adalah disyorkan untuk menggunakan versi Threadsafe dengan versi Apache atau nonthreadSafe dengan nginx; 2. Konfigurasi fail php.ini dan tukar nama php.ini-development atau php.ini-pengeluaran kepada php.ini; 3. Tambah laluan PHP ke laluan pembolehubah persekitaran sistem untuk penggunaan baris arahan; 4. Uji sama ada PHP dipasang dengan jayanya, laksanakan PHP-V melalui baris arahan dan jalankan pelayan terbina dalam untuk menguji keupayaan parsing; 5. Jika anda menggunakan Apache, anda perlu mengkonfigurasi p dalam httpd.conf

Sintaks asas PHP termasuk empat mata utama: 1. Tag PHP mesti berakhir, dan penggunaan tag lengkap disyorkan; 2. Echo dan cetak biasanya digunakan untuk kandungan output, di antaranya Echo menyokong pelbagai parameter dan lebih cekap; 3. Kaedah anotasi termasuk //, # dan //, untuk meningkatkan kebolehbacaan kod; 4. Setiap pernyataan mesti berakhir dengan titik koma, dan ruang dan rehat garis tidak menjejaskan pelaksanaan tetapi mempengaruhi kebolehbacaan. Menguasai peraturan asas ini boleh membantu menulis kod PHP yang jelas dan stabil.

Bagaimana untuk mula menulis skrip PHP pertama anda? Pertama, sediakan persekitaran pembangunan tempatan, pasang XAMPP/MAMP/LAMP, dan gunakan editor teks untuk memahami prinsip berjalan pelayan. Kedua, buat fail yang dipanggil hello.php, masukkan kod asas dan jalankan ujian. Ketiga, belajar menggunakan PHP dan HTML untuk mencapai output kandungan dinamik. Akhirnya, perhatikan kesilapan biasa seperti titik titik koma, isu -isu rujukan, dan kesilapan sambungan fail, dan membolehkan laporan ralat untuk debugging.

Phpisasererver-sidescriptinglanguageusedforwebdevelopment, terutamanyafordynamicwebsitesandcmsplatformslikeworderpress.itrunsontheserver, processesdata, interaksiSwithdatabases, danSendshtmltobrowsers.commonusesinusludeusererorhentication, e-komisana

Langkah -langkah untuk memasang Php8 di Ubuntu adalah: 1. Kemas kini senarai pakej perisian; 2. Pasang Php8 dan komponen asas; 3. Semak versi untuk mengesahkan bahawa pemasangan berjaya; 4. Pasang modul tambahan seperti yang diperlukan. Pengguna Windows boleh memuat turun dan menyegarkan pakej zip, kemudian mengubah suai fail konfigurasi, membolehkan sambungan, dan menambah laluan ke pembolehubah persekitaran. Pengguna MACOS mengesyorkan menggunakan HomeBrew untuk memasang, dan melakukan langkah -langkah seperti menambah ketuk, memasang Php8, menetapkan versi lalai dan mengesahkan versi. Walaupun kaedah pemasangan berbeza di bawah sistem yang berbeza, prosesnya jelas, jadi anda boleh memilih kaedah yang tepat mengikut tujuannya.

TohandlefileoperationsInphp, useappropriatefunctionsandmodes.1.toreAdafile, usefile_get_contents () forsmallfilesorfgets () inaloop forline-by-lineprocessing.2.towritetoafile, useFile_put_contents () forsimpleWritesOrappendingWithTheFile_AppendFlag, orfwrite () w

Kunci untuk menulis pernyataan Ifelse Python adalah untuk memahami struktur dan butiran logik. 1. Infrastruktur adalah untuk melaksanakan sekeping kod jika syarat -syarat ditubuhkan, jika tidak, bahagian lain dilaksanakan, yang lain adalah pilihan; 2. Penghakiman pelbagai syarat dilaksanakan dengan ELIF, dan ia dilaksanakan secara berurutan dan dihentikan sebaik sahaja ia dipenuhi; 3. Bersarang jika digunakan untuk penghakiman subdivisi selanjutnya, adalah disyorkan untuk tidak melebihi dua lapisan; 4. Ekspresi ternary boleh digunakan untuk menggantikan Ifelse mudah dalam senario mudah. Hanya dengan memberi perhatian kepada lekukan, perintah bersyarat dan integriti logik, kita boleh menulis kod penghakiman yang jelas dan stabil.
