最近、入力をセキュリティでフィルタリングしないシステムを作成しました。分析後、system/core
utf8.php、security.php、input.php
の下に3つのファイルが必要です。それらを 1 つのファイルにまとめますが、手間が省けるので 3 つのファイルを使用することをお勧めします。
使用すると次のようになります:
//セキュリティ入力クラスをインスタンス化します
$UNI = new utf8();
$SEC = new security();
$input = new input();
Then $ username = $input->post('ユーザー名')。
もちろん、$cookiepath、$cookieprefix、$cookiedomain、$cookiesecure などの一部の設定変数は変更する必要があります
しかし、重要な設定 $this->_enable_csrf= FALSE もあります。 ; この変数は var $ _enable_csrf= FALSE に対応します。デフォルトは false に設定すると、
は次のコードでチェックされるため、URL の後に _csrf_token_name のキーと値のペアを追加します。
必須 _csrf_cookie_name の Cookie 値が必要です。
参考:
CI 2.0にはcsrf(Cross Site Request Forgery)保護機能があります
この機能がオンになっている場合
フォームをサーバーに投稿するとエラー500が吐き出されます
エラーが発生しました
要求したアクションは許可されていません。
実行されません
このとき、フォームから送信された値にトークン値を追加する必要があります
フォーム機能を正常に使用するには
次の行が見つかりますapplication/config/config.php 内
1234
|
$config$config [ 'csrf_protection' ] = TRUE;
$config [ 'csrf_token_name' [ 'csrf_test_name' ;
$config [ 'csrf_cookie_name' 'csrf_protection' ] = TRUE;'csrf_cookie_name' ;
$config [ 'csrf_expire' ] = 7200;
|
原本$config[‘csrf_protection’]預設是FALSE 改成TRUE就可以打開了
開啟之後 會自動幫你在cookie中存一個值
cookie的name在上面說的config.php中可以設定
之後傳送表單就要連這個token一起傳才行
以下用jquery的ajax功能示範
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
$( function (){
$( '#btn' ).click( function (){
$.ajax({
type: 'POST'
,url: '/ajax' //ajax接收的server端
,data:$( '#form' ).serialize()+ '&csrf_test_name=' 'csrf_test_name' )
,success: function (data){
alert(data.msg);
}
,dataType: 'json'
});
});
});
function getCookie(name){
var arr = document.cookie.match( new RegExp( "(^| )" +name+ "=([^;]*)(;|$)" ));
if $config [null 'csrf_token_name ' return unescape(arr[2]); return null ;
} ] =
'csrf_test_name' |
;
🎜🎜$config🎜🎜[🎜🎜'csrf_cookie_name'🎜🎜] =
🎜🎜'csrf_cookie_name'🎜🎜;🎜🎜🎜🎜$config🎜🎜[🎜🎜'csrf_expire'🎜🎜] = 7200;🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜本来は $config['csrf_protection' のデフォルト値] は FALSE です。 TRUE に変更するとオンになります🎜オンにすると、自動的に Cookie に値が保存されます🎜 Cookie の名前は、上記の config.php で設定できます🎜フォームでは、このトークンを一緒に渡す必要があります🎜🎜次の jquery の ajax 関数を使用したデモ🎜🎜🎜🎜🎜🎜🎜🎜1🎜🎜2🎜🎜3🎜🎜4🎜🎜5🎜🎜6🎜🎜7 🎜🎜8🎜🎜 9🎜🎜 10🎜🎜11🎜🎜12🎜🎜 13🎜🎜14🎜🎜15🎜🎜16🎜🎜17🎜🎜18🎜🎜🎜🎜🎜🎜$( 🎜🎜関数🎜🎜(){🎜🎜🎜🎜 ] 🎜 🎜$(🎜🎜'#btn'🎜🎜) をクリックしてください(🎜🎜function🎜🎜(){🎜🎜🎜🎜 🎜 🎜🎜,url:🎜🎜'/ajax'🎜接続 // ajax受信サーバー端末🎜🎜🎜 🎜 🎜🎜🎜🎜、データ: $ (🎜🎜 '#form'🎜🎜) .Serialize ()+🎜🎜' & csrf_test_name = '🎜🎜+++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++ ++++
getCookie(🎜🎜'csrf_test_name'🎜🎜)🎜🎜🎜🎜🎜🎜alert(data.msg); ️ 🎜🎜});🎜🎜🎜🎜関数🎜🎜getCookie(名前){🎜 🎜🎜🎜 🎜🎜var🎜🎜arr = document.cookie.match(🎜🎜new🎜🎜RegExp(🎜🎜"(^| )"🎜🎜+name+🎜🎜"=([^;]*)(;|$ )"🎜 🎜));🎜🎜🎜🎜 🎜🎜if🎜🎜(arr !=
🎜🎜ヌル🎜🎜)
🎜🎜return🎜🎜unescape(arr[2]); 🎜🎜return🎜🎜null🎜🎜;🎜🎜🎜🎜}🎜🎜🎜🎜🎜🎜
getCookie() は js を使用して Cookie の値を取得します。
これはインターネット上にあり、直接使用できます。
csrf_test_name は config.php で設定できるパラメーターです。一緒にフォームに送信してください
普通に使えます
アドバイスがあればメッセージを残してください〜
参照元: http://ericlbarnes.com/blog/post/codeigniter_csrf_protection_with_ajax
以上、codeigniterを使ったinputクラスを内容も含めて紹介しましたので、PHPチュートリアルに興味のある方の参考になれば幸いです。