6個常見的 PHP 安全性攻擊實例和阻止方法
了解常見的PHP應(yīng)用程序安全威脅,可以確保你的PHP應(yīng)用程序不受攻擊。因此,本文將列出 6個常見的 PHP 安全性攻擊,歡迎大家來閱讀和學(xué)習(xí)。
1、SQL注入
SQL注入是一種惡意攻擊,用戶利用在表單字段輸入SQL語句的方式來影響正常的SQL執(zhí)行。還有一種是通過system()或exec()命令注入的,它具有相同的SQL注入機(jī)制,但只針對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"; }
上面的代碼,在第一行沒有過濾或轉(zhuǎn)義用戶輸入的值($_POST['username'])。因此查詢可能會失敗,甚至?xí)p壞數(shù)據(jù)庫,這要看$username是否包含變換你的SQL語句到別的東西上。
防止SQL注入
選項:
使用mysql_real_escape_string()過濾數(shù)據(jù)
手動檢查每一數(shù)據(jù)是否為正確的數(shù)據(jù)類型
使用預(yù)處理語句并綁定變量
使用準(zhǔn)備好的預(yù)處理語句
分離數(shù)據(jù)和SQL邏輯
預(yù)處理語句將自動過濾(如:轉(zhuǎn)義)
把它作為一個編碼規(guī)范,可以幫助團(tuá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(跨站點腳本攻擊)是一種攻擊,由用戶輸入一些數(shù)據(jù)到你的網(wǎng)站,其中包括客戶端腳本(通常JavaScript)。如果你沒有過濾就輸出數(shù)據(jù)到另一個web頁面,這個腳本將被執(zhí)行。
接收用戶提交的文本內(nèi)容
<?php if (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)容給(另一個)用戶
<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; ?>
將會發(fā)生什么事?
煩人的彈窗
刷新或重定向
損壞網(wǎng)頁或表單
竊取cookie
AJAX(XMLHttpRequest)
防止XSS攻擊
為了防止XSS攻擊,使用PHP的htmlentities()函數(shù)過濾再輸出到瀏覽器。htmlentities()的基本用法很簡單,但也有許多高級的控制,請參閱XSS速查表。
3、會話固定
會話安全,假設(shè)一個PHPSESSID很難猜測。然而,PHP可以接受一個會話ID通過一個Cookie或者URL。因此,欺騙一個受害者可以使用一個特定的(或其他的)會話ID 或者釣魚攻擊。

4、會議捕獲和劫持
這是與會話固定有著同樣的想法,然而,它涉及竊取會話ID。如果會話ID存儲在Cookie中,攻擊者可以通過XSS和JavaScript竊取。如果會話ID包含在URL上,也可以通過嗅探或者從代理服務(wù)器那獲得。
防止會話捕獲和劫持
更新ID
如果使用會話,請確保用戶使用SSL
5、跨站點請求偽造(CSRF)
CSRF攻擊,是指一個頁面發(fā)出的請求,看起來就像是網(wǎng)站的信任用戶,但不是故意的。它有許多的變體,比如下面的例子:
相關(guān)文章
PHP生成json和xml類型接口數(shù)據(jù)格式
在做數(shù)據(jù)接口時,我們通常要獲取第三方數(shù)據(jù)接口或者給第三方提供數(shù)據(jù)接口,而這些數(shù)據(jù)格式通常是以XML或者JSON格式傳輸,本文將介紹如何使用PHP生成XML格式數(shù)據(jù)供第三方調(diào)用以及如何獲取第三方提供的XML數(shù)據(jù)。2015-05-05ThinkPHP模板循環(huán)輸出Volist標(biāo)簽用法實例詳解
這篇文章主要介紹了ThinkPHP模板循環(huán)輸出Volist標(biāo)簽用法,結(jié)合實例形式詳細(xì)分析了Volist標(biāo)簽的功能,使用方法與相關(guān)注意事項,需要的朋友可以參考下2016-03-03去掉destoon資訊內(nèi)容頁keywords關(guān)鍵字自帶的文章標(biāo)題的方法
這篇文章主要介紹了去掉destoon資訊內(nèi)容頁keywords關(guān)鍵字自帶的文章標(biāo)題的方法,有一定的實用價值,需要的朋友可以參考下2014-08-08