国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

PHP安全之?dāng)?shù)據(jù)庫安全——設(shè)計(jì)、連接和加密

瀏覽:5日期:2022-09-15 11:33:20
設(shè)計(jì)數(shù)據(jù)庫

第一步一般都是創(chuàng)建數(shù)據(jù)庫,除非是使用第三方的數(shù)據(jù)庫服務(wù)。當(dāng)創(chuàng)建一個數(shù)據(jù)庫的時候,會指定一個所有者來執(zhí)行和新建語句。通常,只有所有者(或超級用戶)才有權(quán)對數(shù)據(jù)庫中的對象進(jìn)行任意操作。如果想讓其他用戶使用,就必須賦予他們權(quán)限。

應(yīng)用程序永遠(yuǎn)不要使用數(shù)據(jù)庫所有者或超級用戶帳號來連接數(shù)據(jù)庫,因?yàn)檫@些帳號可以執(zhí)行任意的操作,比如說修改數(shù)據(jù)庫結(jié)構(gòu)(例如刪除一個表)或者清空整個數(shù)據(jù)庫的內(nèi)容。

應(yīng)該為程序的每個方面創(chuàng)建不同的數(shù)據(jù)庫帳號,并賦予對數(shù)據(jù)庫對象的極有限的權(quán)限。僅分配給能完成其功能所需的權(quán)限,避免同一個用戶可以完成另一個用戶的事情。這樣即使攻擊者利用程序漏洞取得了數(shù)據(jù)庫的訪問權(quán)限,也最多只能做到和該程序一樣的影響范圍。

鼓勵用戶不要把所有的事務(wù)邏輯都用 web 應(yīng)用程序(即用戶的腳本)來實(shí)現(xiàn)。最好用視圖(view)、觸發(fā)器(trigger)或者規(guī)則(rule)在數(shù)據(jù)庫層面完成。當(dāng)系統(tǒng)升級的時候,需要為數(shù)據(jù)庫開辟新的接口,這時就必須重做所有的數(shù)據(jù)庫客戶端。除此之外,觸發(fā)器還可以透明和自動地處理字段,并在調(diào)試程序和跟蹤事實(shí)時提供有用的信息。

連接數(shù)據(jù)庫

把連接建立在 SSL 加密技術(shù)上可以增加客戶端和服務(wù)器端通信的安全性,或者 SSH 也可以用于加密客戶端和數(shù)據(jù)庫之間的連接。如果使用了這些技術(shù)的話,攻擊者要監(jiān)視服務(wù)器的通信或者得到數(shù)據(jù)庫的信息是很困難的。

加密存儲模型

SSL/SSH 能保護(hù)客戶端和服務(wù)器端交換的數(shù)據(jù),但 SSL/SSH 并不能保護(hù)數(shù)據(jù)庫中已有的數(shù)據(jù)。SSL 只是一個加密網(wǎng)絡(luò)數(shù)據(jù)流的協(xié)議。

如果攻擊者取得了直接訪問數(shù)據(jù)庫的許可(繞過 web 服務(wù)器),敏感數(shù)據(jù)就可能暴露或者被濫用,除非數(shù)據(jù)庫自己保護(hù)了這些信息。對數(shù)據(jù)庫內(nèi)的數(shù)據(jù)加密是減少這類風(fēng)險(xiǎn)的有效途徑,但是只有很少的數(shù)據(jù)庫提供這些加密功能。

對于這個問題,有一個簡單的解決辦法,就是創(chuàng)建自己的加密機(jī)制,然后把它用在 PHP 程序內(nèi)。PHP 有幾個擴(kuò)展庫可以完成這個工作,比如說?Mcrypt?和?Mhash?等,它們包含多種加密運(yùn)算法則。腳本在插入數(shù)據(jù)庫之前先把數(shù)據(jù)加密,以后提取出來時再解密。

對某些真正隱蔽的數(shù)據(jù),如果不需要以明文的形式存在(即不用顯示),可以考慮用散列算法。使用散列算法最常見的例子就是把密碼經(jīng)過 MD5 加密后的散列存進(jìn)數(shù)據(jù)庫來代替原來的明文密碼。

Example #1 對密碼字段進(jìn)行散列加密

<?php // 存儲密碼散列 $query = sprintf('INSERT INTO users(name,pwd) VALUES(’%s’,’%s’);', pg_escape_string($username), md5($password)); $result = pg_query($connection, $query); // 發(fā)送請求來驗(yàn)證用戶密碼 $query = sprintf('SELECT 1 FROM users WHERE name=’%s’ AND pwd=’%s’;', pg_escape_string($username), md5($password)); $result = pg_query($connection, $query); if (pg_num_rows($result) > 0) {echo ’Welcome, $username!’; } else {echo ’Authentication failed for $username.’; }?>

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 景德镇市| 太原市| 云浮市| 比如县| 洞口县| 青海省| 鞍山市| 珲春市| 廊坊市| 城口县| 曲麻莱县| 伊川县| 夏河县| 宁乡县| 昭通市| 石城县| 赣榆县| 留坝县| 墨竹工卡县| 余姚市| 潮州市| 崇信县| 大新县| 望江县| 丹棱县| SHOW| 逊克县| 化州市| 永德县| 修文县| 滕州市| 桂林市| 杭锦后旗| 洛川县| 汝城县| 灵丘县| 蓬溪县| 保德县| 女性| 黄梅县| 康平县|