6個(gè)常見(jiàn)的 PHP 安全性攻擊實(shí)例和阻止方法
了解常見(jiàn)的PHP應(yīng)用程序安全威脅,可以確保你的PHP應(yīng)用程序不受攻擊。因此,本文將列出 6個(gè)常見(jiàn)的 PHP 安全性攻擊,歡迎大家來(lái)閱讀和學(xué)習(xí)。
1、SQL注入
SQL注入是一種惡意攻擊,用戶利用在表單字段輸入SQL語(yǔ)句的方式來(lái)影響正常的SQL執(zhí)行。還有一種是通過(guò)system()或exec()命令注入的,它具有相同的SQL注入機(jī)制,但只針對(duì)shell命令。
$username = $_POST[’username’];$query = 'select * from auth where username = ’'.$username.'’';echo $query;$db = new mysqli(’localhost’, ’demo’, ‘demo’, ‘demodemo’);$result = $db->query($query);if ($result && $result->num_rows) { echo '<br />Logged in successfully';} else { echo '<br />Login failed';}
上面的代碼,在第一行沒(méi)有過(guò)濾或轉(zhuǎn)義用戶輸入的值($_POST[’username’])。因此查詢可能會(huì)失敗,甚至?xí)p壞數(shù)據(jù)庫(kù),這要看$username是否包含變換你的SQL語(yǔ)句到別的東西上。
防止SQL注入
選項(xiàng):
使用mysql_real_escape_string()過(guò)濾數(shù)據(jù)
手動(dòng)檢查每一數(shù)據(jù)是否為正確的數(shù)據(jù)類型
使用預(yù)處理語(yǔ)句并綁定變量
使用準(zhǔn)備好的預(yù)處理語(yǔ)句
分離數(shù)據(jù)和SQL邏輯
預(yù)處理語(yǔ)句將自動(dòng)過(guò)濾(如:轉(zhuǎn)義)
把它作為一個(gè)編碼規(guī)范,可以幫助團(tuán)隊(duì)里的新人避免遇到以上問(wèn)題。
$query = ’select name, district from city where countrycode=?’;if ($stmt = $db->prepare($query) ){ $countrycode = ’hk’; $stmt->bind_param('s', $countrycode); $stmt->execute(); $stmt->bind_result($name, $district); while ( $stmt ($stmt->fetch() ){echo $name.’, ’.$district;echo ’<br />’; } $stmt->close();}
2、XSS攻擊
XSS(跨站點(diǎn)腳本攻擊)是一種攻擊,由用戶輸入一些數(shù)據(jù)到你的網(wǎng)站,其中包括客戶端腳本(通常JavaScript)。如果你沒(méi)有過(guò)濾就輸出數(shù)據(jù)到另一個(gè)web頁(yè)面,這個(gè)腳本將被執(zhí)行。
接收用戶提交的文本內(nèi)容
<?phpif (file_exists(’comments’)) { $comments = get_saved_contents_from_file(’comments’);} else { $comments = ’’;}if (isset($_POST[’comment’])) { $comments .= ’<br />’ . $_POST[’comment’]; save_contents_to_file(’comments’, $comments);}>
輸出內(nèi)容給(另一個(gè))用戶
<form action=’xss.php’ method=’POST’>Enter your comments here: <br /><textarea name=’comment’></textarea> <br /><input type=’submit’ value=’Post comment’ /></form><hr /><br /><?php echo $comments; ?>
將會(huì)發(fā)生什么事?
煩人的彈窗
刷新或重定向
損壞網(wǎng)頁(yè)或表單
竊取cookie
AJAX(XMLHttpRequest)
防止XSS攻擊
為了防止XSS攻擊,使用PHP的htmlentities()函數(shù)過(guò)濾再輸出到瀏覽器。htmlentities()的基本用法很簡(jiǎn)單,但也有許多高級(jí)的控制,請(qǐng)參閱XSS速查表。
3、會(huì)話固定
會(huì)話安全,假設(shè)一個(gè)PHPSESSID很難猜測(cè)。然而,PHP可以接受一個(gè)會(huì)話ID通過(guò)一個(gè)Cookie或者URL。因此,欺騙一個(gè)受害者可以使用一個(gè)特定的(或其他的)會(huì)話ID 或者釣魚(yú)攻擊。

4、會(huì)議捕獲和劫持
這是與會(huì)話固定有著同樣的想法,然而,它涉及竊取會(huì)話ID。如果會(huì)話ID存儲(chǔ)在Cookie中,攻擊者可以通過(guò)XSS和JavaScript竊取。如果會(huì)話ID包含在URL上,也可以通過(guò)嗅探或者從代理服務(wù)器那獲得。
防止會(huì)話捕獲和劫持
更新ID
如果使用會(huì)話,請(qǐng)確保用戶使用SSL
5、跨站點(diǎn)請(qǐng)求偽造(CSRF)
CSRF攻擊,是指一個(gè)頁(yè)面發(fā)出的請(qǐng)求,看起來(lái)就像是網(wǎng)站的信任用戶,但不是故意的。它有許多的變體,比如下面的例子:
<img src=’http://example.com/single_click_to_buy.php?user_id=123&item=12345’>
防止跨站點(diǎn)請(qǐng)求偽造
一般來(lái)說(shuō),確保用戶來(lái)自你的表單,并且匹配每一個(gè)你發(fā)送出去的表單。有兩點(diǎn)一定要記住:
對(duì)用戶會(huì)話采用適當(dāng)?shù)陌踩胧?給每一個(gè)會(huì)話更新id和用戶使用SSL。
生成另一個(gè)一次性的令牌并將其嵌入表單,保存在會(huì)話中(一個(gè)會(huì)話變量),在提交時(shí)檢查它。
6、代碼注入
代碼注入是利用計(jì)算機(jī)漏洞通過(guò)處理無(wú)效數(shù)據(jù)造成的。問(wèn)題出在,當(dāng)你不小心執(zhí)行任意代碼,通常通過(guò)文件包含。寫(xiě)得很糟糕的代碼可以允許一個(gè)遠(yuǎn)程文件包含并執(zhí)行。如許多PHP函數(shù),如require可以包含URL或文件名,例如:
<form>Choose theme: <select name = theme><option value = blue>Blue</option><option value = green>Green</option><option value = red>Red</option> </select> <input type = submit></form><?php if($theme) {require($theme.’.txt’); }?>
在上面的例子中,通過(guò)傳遞用戶輸入的一個(gè)文件名或文件名的一部分,來(lái)包含以'http://'開(kāi)頭的文件。
防止代碼注入
過(guò)濾用戶輸入
在php.ini中設(shè)置禁用allow_url_fopen和allow_url_include。這將禁用require/include/fopen的遠(yuǎn)程文件。
其他的一般原則
1. 不要依賴服務(wù)器配置來(lái)保護(hù)你的應(yīng)用,特別是當(dāng)你的web服務(wù)器/ PHP是由你的ISP管理,或者當(dāng)你的網(wǎng)站可能遷移/部署到別處,未來(lái)再?gòu)膭e處遷移/部署在到其他地方。請(qǐng)?jiān)诰W(wǎng)站代碼中嵌入帶有安全意識(shí)的檢查/邏輯(HTML、JavaScript、PHP,等等)。
2. 設(shè)計(jì)服務(wù)器端的安全腳本:
—例如,使用單行執(zhí)行 - 單點(diǎn)身份驗(yàn)證和數(shù)據(jù)清理
—例如,在所有的安全敏感頁(yè)面嵌入一個(gè)PHP函數(shù)/文件,用來(lái)處理所有登錄/安全性邏輯檢查
3. 確保你的代碼更新,并打上最新補(bǔ)丁。
到此這篇關(guān)于6個(gè)常見(jiàn)的 PHP 安全性攻擊實(shí)例和阻止方法的文章就介紹到這了,更多相關(guān)PHP安全性攻擊內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. 如何在jsp界面中插入圖片2. ASP實(shí)現(xiàn)加法驗(yàn)證碼3. python selenium 獲取接口數(shù)據(jù)的實(shí)現(xiàn)4. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)5. 詳解JSP 內(nèi)置對(duì)象request常見(jiàn)用法6. 利用ajax+php實(shí)現(xiàn)商品價(jià)格計(jì)算7. Python matplotlib 繪制雙Y軸曲線圖的示例代碼8. jsp EL表達(dá)式詳解9. JSP servlet實(shí)現(xiàn)文件上傳下載和刪除10. springboot集成與使用Sentinel的方法
