Skip to content

Commit 28f8201

Browse files
first commit
1 parent 514d1e0 commit 28f8201

File tree

7 files changed

+115
-61
lines changed

7 files changed

+115
-61
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/vendor/

.idea/php.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 24 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,35 @@
1+
![latest release](https://img.shields.io/badge/PHP->=7.3-blue.svg?style=flat-square)
2+
![latest release](https://img.shields.io/badge/Version-1.0.0-red.svg?style=flat-square)
3+
![latest release](https://img.shields.io/badge/License-MIT-success.svg?style=flat-square)
4+
15
# PHP CSRF
26

3-
## Kurulum
4-
```shell
5-
composer require orkhanshukurlu/php-csrf
6-
```
7+
PHP CSRF, PHP üçün yazılmış CSRF token paketidir. Siz bu paket vasitəsilə yazdığınız layihəni həm CSRF hücumlarından qoruyacaqsınız həm də layihənizi daha təhlükəsiz etmiş olacaqsınız
78

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;
9+
## Tələblər
1210

13-
require __DIR__ . "/vendor/autoload.php";
11+
* PHP 7.3+
1412

15-
// Sınıfı ürettiğinizde token oluşturur. Herhangi bir istek yoksa üretilir, istek varsa token üretmez.
16-
$csrf = new Csrf;
13+
## Yükləmə
1714

18-
// Üretilen token değerini getirir.
19-
$csrf->getToken();
2015
```
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.
16+
composer require orkhanshukurlu/php-csrf
17+
```
2318

24-
## ! Not :
25-
`hasToken` yöntemine gelen verileri olduğu gibi veriniz arkaplanda, `input[name=_token]` olarak bakacaktır.
19+
## İstifadə
20+
`vendor/autoload.php` faylını səhifəyə daxil etdikdən sonra CSRF istifadə etmək mümkündür
2621
```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>
22+
require __DIR__.'/vendor/autoload.php';
4323
```
4424

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.
25+
### `Csrf::field() - csrf_field()`
26+
CSRF token üçün gizli input generasiya edir. `Html`-də `<form>` elementinin daxilinə uyğun metod və ya funkisyanı əlavə etmək lazımdır
27+
```php
28+
require __DIR__.'/vendor/autoload.php';
29+
30+
// Csrf sinifi vasitəsi ilə istifadə
31+
use OrkhanShukurlu\Csrf\Csrf;
32+
33+
echo Csrf::field(); //
34+
// Funksiya vasitəsi ilə istifadə
35+
```

composer.json

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,26 @@
11
{
22
"name": "orkhanshukurlu/php-csrf",
3-
"description": "A package written for user activity logging in Laravel",
3+
"description": "PHP üçün yazılmış CSRF token paketi",
44
"keywords": [
55
"orkhanshukurlu",
6-
"laravel",
7-
"activity-log",
8-
"user-activity-log"
6+
"php-csrf",
7+
"csrf",
8+
"php"
99
],
10-
"homepage": "https://github.com/orkhanshukurlu/php-csrf",
11-
"license": "MIT",
1210
"authors": [
1311
{
1412
"name": "Orkhan Shukurlu",
15-
"email": "orkhandev@gmail.com",
16-
"role": "Developer"
13+
"email": "orkhandev@gmail.com"
1714
}
1815
],
16+
"homepage": "https://github.com/orkhanshukurlu/php-csrf",
17+
"license": "MIT",
1918
"require": {
20-
"php" : "^7.3|^8.0|^8.1",
21-
"illuminate/database": "^7.0|^8.0|^9.0"
19+
"php" : ">=7.3"
2220
},
2321
"autoload": {
2422
"psr-4": {
25-
"OrkhanShukurlu\\ActivityLog\\": "src"
23+
"OrkhanShukurlu\\Csrf\\": "src/"
2624
},
2725
"files": [
2826
"src/helpers.php"
@@ -33,4 +31,4 @@
3331
},
3432
"minimum-stability": "dev",
3533
"prefer-stable": true
36-
}
34+
}

index.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?php
2+
3+
try {
4+
echo csrf_field();
5+
} catch (Exception $e) {
6+
}

src/Csrf.php

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,51 @@
22

33
namespace OrkhanShukurlu\Csrf;
44

5+
use Exception;
6+
57
class Csrf
68
{
7-
public static function check(array $request): bool
8-
{
9-
return isset($request['_token'], $_SESSION['_token']) && hash_equals($request['_token'], $_SESSION['_token']);
10-
}
9+
const TOKEN_NAME = '_token';
10+
const TOKEN_SIZE = 20;
1111

12+
/**
13+
* CSRF token üçün input generasiya edir
14+
*
15+
* @return string
16+
* @throws Exception
17+
*/
1218
public static function field(): string
1319
{
14-
return '<input type="hidden" name="_token" value="' . csrf_token() . '">';
20+
return '<input type="hidden" name="' . self::TOKEN_NAME . '" value="' . self::token() . '">';
1521
}
1622

23+
/**
24+
* CSRF token dəyəri generasiya edir
25+
*
26+
* @return string
27+
* @throws Exception
28+
*/
1729
public static function token(): string
1830
{
1931
if (session_status() === PHP_SESSION_NONE) {
2032
session_start();
2133
}
2234

23-
if (!isset($_SESSION['_token'])) {
24-
$_SESSION['_token'] = bin2hex(random_bytes(40));
35+
if (! isset($_SESSION[self::TOKEN_NAME])) {
36+
$_SESSION[self::TOKEN_NAME] = bin2hex(random_bytes(self::TOKEN_SIZE));
2537
}
2638

27-
return $_SESSION['_token'];
39+
return $_SESSION[self::TOKEN_NAME];
40+
}
41+
42+
/**
43+
* CSRF tokenin doğruluğunu yoxlayır
44+
*
45+
* @param array $request
46+
* @return bool
47+
*/
48+
public static function validate(array $request): bool
49+
{
50+
return isset($request[self::TOKEN_NAME], $_SESSION[self::TOKEN_NAME]) && hash_equals($request[self::TOKEN_NAME], $_SESSION[self::TOKEN_NAME]);
2851
}
2952
}

src/helpers.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
use OrkhanShukurlu\Csrf\Csrf;
4+
5+
if (! function_exists('csrf_field')) {
6+
/**
7+
* CSRF token üçün input generasiya edir
8+
*
9+
* @return string
10+
* @throws Exception
11+
*/
12+
function csrf_field(): string
13+
{
14+
return Csrf::field();
15+
}
16+
}
17+
18+
if (! function_exists('csrf_token')) {
19+
/**
20+
* CSRF token dəyəri generasiya edir
21+
*
22+
* @return string
23+
* @throws Exception
24+
*/
25+
function csrf_token(): string
26+
{
27+
return Csrf::token();
28+
}
29+
}
30+
31+
if (! function_exists('csrf_validate')) {
32+
/**
33+
* CSRF tokenin doğruluğunu yoxlayır
34+
*
35+
* @param array $request
36+
* @return bool
37+
*/
38+
function csrf_validate(array $request): bool
39+
{
40+
return Csrf::validate($request);
41+
}
42+
}

0 commit comments

Comments
 (0)