File tree 5 files changed +167
-0
lines changed
5 files changed +167
-0
lines changed Original file line number Diff line number Diff line change
1
+ vendor
Original file line number Diff line number Diff line change
1
+ # PHP CSRF
2
+
3
+ ## Kurulum
4
+ ``` shell
5
+ composer require ahmetbarut\c srf
6
+ ```
7
+
8
+ ### Basit Kullanım
9
+ ` vendor/autoload.php ` dosyasını dahil ettikten sonra ` Csrf ` sınıfını üretin. Sınıfı ` new ` anahtar kelimesiyle çağırdığınızda token üretecektir. Tokeni kullanmak için:
10
+ ``` php
11
+ use ahmetbarut\Csrf\Csrf;
12
+
13
+ require __DIR__ . "/vendor/autoload.php";
14
+
15
+ // Sınıfı ürettiğinizde token oluşturur. Herhangi bir istek yoksa üretilir, istek varsa token üretmez.
16
+ $csrf = new Csrf;
17
+
18
+ // Üretilen token değerini getirir.
19
+ $csrf->getToken();
20
+ ```
21
+ ### HTML İçinde Kullanım Ve Kontrol
22
+ Burda kolay kullanım açısından form içinde helper fonksiyonları kullanılıyor. İki yöntemi de kullanabilirsiniz.
23
+
24
+ ## ! Not :
25
+ ` hasToken ` yöntemine gelen verileri olduğu gibi veriniz arkaplanda, ` input[name=_token] ` olarak bakacaktır.
26
+ ``` php
27
+ <?php
28
+ use ahmetbarut\Csrf\Csrf;
29
+
30
+ require __DIR__ . "/vendor/autoload.php";
31
+
32
+ $csrf = new Csrf;
33
+ if($_POST){
34
+ $csrf->tokenHas($_POST); // bool
35
+ }
36
+ ?>
37
+
38
+ <form method =" POST" >
39
+ <?=csrf_field()?>
40
+ <input type =" text" name =" test" >
41
+ <button >Gönder</button >
42
+ </form >
43
+ ```
44
+
45
+ | Method | Hakkında |
46
+ | :--- | :----:
47
+ | __ construct | Nesne üretildiğinde beraberinde ` session ` 'u başlatır ve token oluşturur. |
48
+ | tokenHas | Verilen tokeni, oluşturulan token ile karşılaştırır. |
49
+ | getToken | Oluşturulan son tokeni döndürür.
50
+ | csrf_field | İnput oluşturur ve token verir. Helper fonksiyonudur.
51
+ | create_token | Yeni token oluşturur.
Original file line number Diff line number Diff line change
1
+ {
2
+ "name" : " ahmetbarut/csrf" ,
3
+ "autoload" : {
4
+ "psr-4" : {
5
+ "ahmetbarut\\ Csrf\\ " : " src/"
6
+ },
7
+ "files" : [
8
+ " ./src/helper.php"
9
+ ]
10
+ },
11
+ "authors" : [
12
+ {
13
+ "name" : " Ahmet Barut" ,
14
+
15
+ }
16
+ ],
17
+ "require" : {}
18
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace ahmetbarut \Csrf ;
4
+
5
+ class Csrf
6
+ {
7
+ /**
8
+ * Tokeni tutar
9
+ * @var string
10
+ */
11
+ protected string $ token ;
12
+
13
+ public function __construct ()
14
+ {
15
+ if (session_status () === PHP_SESSION_NONE ) {
16
+ session_start ();
17
+ }
18
+
19
+ if (empty ($ _REQUEST )) {
20
+ $ this ->generateToken ();
21
+ }
22
+ }
23
+
24
+ /**
25
+ * Yeni bir token oluşturur
26
+ */
27
+ public function generateToken ()
28
+ {
29
+ $ this ->token = $ _SESSION ["_token " ] = md5 (time () . rand (0 , 9999 ));
30
+ }
31
+
32
+ /**
33
+ * tokenin varlığını kontrol eder.
34
+ * @param array|object $post
35
+ * @return bool
36
+ */
37
+ public function tokenHas (array | object $ post ): bool
38
+ {
39
+ if (is_array ($ post )) {
40
+ $ post = (object ) $ post ;
41
+ }
42
+ if (isset ($ post ->_token )) {
43
+ if ($ post ) {
44
+ if ($ post ->_token === $ this ->getToken ()) {
45
+ return true ;
46
+ }
47
+ return false ;
48
+ }
49
+ }
50
+ return false ;
51
+ }
52
+
53
+ /**
54
+ * Oluşturulan Tokeni getirir.
55
+ * @return string
56
+ */
57
+ public function getToken (): string
58
+ {
59
+ return $ _SESSION ['_token ' ];
60
+ }
61
+
62
+ /**
63
+ * Hata durumunda dönecek hata kodu ve mesajı
64
+ * @param int $code
65
+ * @param string $message
66
+ */
67
+ public function error ($ code = 419 , $ message = "Page Expired " )
68
+ {
69
+ return header ("HTTP/1.1 {$ code } {$ message }" );
70
+ }
71
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ use ahmetbarut \Csrf \Csrf ;
4
+
5
+ /**
6
+ * Yeni Tokeni Döndürür
7
+ *
8
+ * @return void
9
+ */
10
+ function create_token ()
11
+ {
12
+ return (new Csrf )->getToken ();
13
+ }
14
+
15
+ /**
16
+ * Token için input oluşturur
17
+ *
18
+ * @return void
19
+ */
20
+ function csrf_field ()
21
+ {
22
+ $ token = create_token ();
23
+ echo <<<csrf
24
+ <input type="hidden" name="_token" value=" {$ token }">
25
+ csrf ;
26
+ }
You can’t perform that action at this time.
0 commit comments