CSRF跨站點請求僞造漏洞問題

最近在寫php,項目寫完後送檢發現一個漏洞問題CSRF,強行拖了我一天的時間,沉迷解決問題,茶飯不思,日漸消瘦,時間比較趕,這篇比較糙,湊合看下。php

好了廢話很少說下面是今天的解決方案。php框架

博主用的是Thinkphp框架,發現這個問題的時候第一件事就是去查下相關資料,發現發現網上說能夠經過表單令牌來解決這個問題。框架

若是不設置表單令牌,很容易致使CSRF(跨站請求僞造)、跨站提交表單。ui

表單令牌是一種很是實用的技術(博主ps:其實雞肋),它在表單的視圖部分生成隨機令牌,默認爲隨機的MD5串,存在hidden的input中。在表單數據提交前,將提交的數據與SESSION中存放的令牌進行比對,從而判斷是不是跨站提交。this

ThinkPHP中開啓表單令牌的方式比較簡單,在config中進行配置(博主的路徑:項目/Home/Conf/config.php):spa

        'TOKEN_ON'=>true,  // 是否開啓令牌驗證
    'TOKEN_NAME'=>'__hash__',    // 令牌驗證的表單隱藏字段名稱
    'TOKEN_TYPE'=>'md5',  //令牌哈希驗證規則 默認爲MD5
    'TOKEN_RESET'=>true,  //令牌驗證出錯後是否重置令牌 默認爲true    

添加完成上面的代碼後還須要在tags.php配置一波。ps:有的小夥伴沒有tags.php能夠在項目/Common/Conf目錄下新建一個tags.php插入如下代碼3d

<?php
return array(
    //'配置項'=>'配置值'
    'view_filter'=>array('Behavior\TokenBuildBehavior'),
);

而後你就能夠在你的全部表單頁面看到code

<input type="hidden" name="__hash__" value="11f6b3285bf71a87811c3dadccb7b166_c6694a7c3a76bbf9ac7bf66a77d87310" />這個。

若是你只想在部分頁面的表單加入表單令牌你能夠:blog

C(‘TOKEN_ON’,false);

$this->display();

 

配置完成後在你的表單提交地址指向的方法裏面加入下面代碼:md5

if(!$Data->autoCheckToken($_POST)){  
           $this->error('非法登錄!');
           }

上面的$Data是model

今天先寫到這裏要寫代碼了。

相關文章
相關標籤/搜索