Black Mesa Çalışanı
Hectopat
- Katılım
- 17 Nisan 2021
- Mesajlar
- 492
- Çözümler
- 11
Doğru diyorsun PHP biraz eski ve modern değil bundan dolayı herhangi bir şekilde JavaScript ile karşılaştırılamaz ve karşılaştırılıp daha iyi olduğu iddia edilemez(!)Sanırım son zamanlarda gördüğüm en saçma yanıttı. JWT JSON bazlı tüm platformlarda implemente edebileceğin bir protokoldür.
session_start();
$_SESSION['extranet']['username'] = $row["username"];
$_SESSION['extranet']['email'] = $row["email"];
$_SESSION['extranet']['id'] = $row["id"];
$_SESSION['extranet']['salt1'] = $row["salt"];
$_SESSION['extranet']['salt2'] = $row["salt2"];
$_SESSION['extranet']['active'] = $row["active"];
$_SESSION['extranet']['name'] = $row["name"];
$_SESSION['extranet']['surname'] = $row["surname"];
$_SESSION['extranet']['department_id'] = $row["department_id"];
$_SESSION['extranet']['department_name'] = $row["department_name"];
$_SESSION['extranet']['title_name'] = $row["title_name"];
$_SESSION['extranet']['multi_department'] = $row["is_multi_department"];
$_SESSION['extranet']['multi_departments'] = json_decode($row["multi_departments"],true);
$JSONPayload = json_encode($_SESSION);
Doğru diyorsun PHP biraz eski ve modern değil bundan dolayı herhangi bir şekilde JavaScript ile karşılaştırılamaz ve karşılaştırılıp daha iyi olduğu iddia edilemez(!)
Maalesef çok bilenler hep beni yoruyor.
PHP:session_start(); $_SESSION['extranet']['username'] = $row["username"]; $_SESSION['extranet']['email'] = $row["email"]; $_SESSION['extranet']['id'] = $row["id"]; $_SESSION['extranet']['salt1'] = $row["salt"]; $_SESSION['extranet']['salt2'] = $row["salt2"]; $_SESSION['extranet']['active'] = $row["active"]; $_SESSION['extranet']['name'] = $row["name"]; $_SESSION['extranet']['surname'] = $row["surname"]; $_SESSION['extranet']['department_id'] = $row["department_id"]; $_SESSION['extranet']['department_name'] = $row["department_name"]; $_SESSION['extranet']['title_name'] = $row["title_name"]; $_SESSION['extranet']['multi_department'] = $row["is_multi_department"]; $_SESSION['extranet']['multi_departments'] = json_decode($row["multi_departments"],true); $JSONPayload = json_encode($_SESSION);
Doğru söylüyorsun arkadaşım, bir daha bu kategoriye gelmem.Senin dediğin JWT = PHP Session Token'di ve yanlıştı.
Ne yaptığımı söyleyecek kadar şovmen değilim, gerekte duymuyorum.Laravel 9 ile halen daha e-para uygulaması geliştiren bir ekipte Backend liderliği yapıyorum.
Ne yaptığımı söyleyecek kadar şovmen değilim, gerek de duymuyorum.
Token içerisinde expire değeri mevcut. Ayrıca token tarayıcı cookielerine kaydedilir. Siteye giriş yapıldığında cookieden bu değeri okursun. Expire olmuşsa yeni bir token alırsın veya login sayfasına yönlendirirsin.Değerli cevaplarınız için teşekkür ederim , peki bu token oluşturulduktan sonra kullanıcı tarayıcıyı kapattı ne olucak ? token kişinin ip bilgisine mi tanımlı oluyor ?
Yani hocam anladığım kadarıyla jwt sistemi kullanıcı giriş yaptığında ona username, user_id vb benim belirlediğim değerleri kapalı bir tokende kapalı olarak tutuyor ve buna bir expire süresi tanımlıyor (yine benim belirlediğim bir süreyi) daha sonra kullanıcı aynı bilgisayar üzerinden giriş yapmış ise ve expire süresi dolmamış ise oturum açıyor.Token içerisinde expire değeri mevcut. Ayrıca token tarayıcı cookielerine kaydedilir. Siteye giriş yapıldığında cookieden bu değeri okursun. Expire olmuşsa yeni bir token alırsın veya login sayfasına yönlendirirsin.
Expire olup olmadığını sunucu yapar. Yeni token alma olayını "jwt refresh token" olarak aratabilirsin.
Elimizde bir JWT token olduğunu farz edelim:Yani hocam anladığım kadarıyla jwt sistemi kullanıcı giriş yaptığında ona username, user_id vb benim belirlediğim değerleri kapalı bir tokende kapalı olarak tutuyor ve buna bir expire süresi tanımlıyor (yine benim belirlediğim bir süreyi) daha sonra kullanıcı aynı bilgisayar üzerinden giriş yapmış ise ve expire süresi dolmamış ise oturum açıyor.
eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjAsInVzZXIiOnsiY3JlYXRlZF9hdCI6IjIwMjMtMTEtMTVUMDc6NTU6MDMuMTg0NTgxWiIsImRlbGV0ZWRfYXQiOiIwMDAxLTAxLTAxVDAwOjAwOjAwWiIsImlkIjoxLCJpc19hY3RpdmUiOnRydWUsIm5hbWUiOiJUZXN0Iiwic3VybmFtZSI6IjEiLCJ0YXhwYXllcl9pZCI6MSwidXBkYXRlZF9hdCI6IjIwMjMtMTEtMTVUMDc6NTU6MDUuMDc4MTAzWiIsInVzZXJuYW1lIjoidGVzdDEifX0.Og4PSRzCygccr3hyEDf1Ct2YX9lx5JSyPEfj_1zsOc6up5q6UNEeo3-OrRgRTIm22ptqKmK7DWnMrDa71uPhug
{
"authorized": true,
"exp": 0,
"user": {
"created_at": "2023-11-15T07:55:03.184581Z",
"deleted_at": "0001-01-01T00:00:00Z",
"id": 1,
"is_active": true,
"name": "Test",
"surname": "1",
"taxpayer_id": 1,
"updated_at": "2023-11-15T07:55:05.078103Z",
"username": "test1"
}
}
jwt.io üzerinden bakacak olursan içeriğin değiştirilebileceğini göreceksin e o zaman güvenliği yok bu icadın.Elimizde bir JWT token olduğunu farz edelim:
eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjAsInVzZXIiOnsiY3JlYXRlZF9hdCI6IjIwMjMtMTEtMTVUMDc6NTU6MDMuMTg0NTgxWiIsImRlbGV0ZWRfYXQiOiIwMDAxLTAxLTAxVDAwOjAwOjAwWiIsImlkIjoxLCJpc19hY3RpdmUiOnRydWUsIm5hbWUiOiJUZXN0Iiwic3VybmFtZSI6IjEiLCJ0YXhwYXllcl9pZCI6MSwidXBkYXRlZF9hdCI6IjIwMjMtMTEtMTVUMDc6NTU6MDUuMDc4MTAzWiIsInVzZXJuYW1lIjoidGVzdDEifX0.Og4PSRzCygccr3hyEDf1Ct2YX9lx5JSyPEfj_1zsOc6up5q6UNEeo3-OrRgRTIm22ptqKmK7DWnMrDa71uPhug
bunu çözümlediğimizde alttaki JSON'a ulaşırız:
JSON:{ "authorized": true, "exp": 0, "user": { "created_at": "2023-11-15T07:55:03.184581Z", "deleted_at": "0001-01-01T00:00:00Z", "id": 1, "is_active": true, "name": "Test", "surname": "1", "taxpayer_id": 1, "updated_at": "2023-11-15T07:55:05.078103Z", "username": "test1" } }
bu örnekte exp değeri 0 olduğu için herhangi bir expire time yok.
gördüğün üzere user'a dair ne gerekli görüldüyse koyulmuş.
üstteki ey ile başlayan token hangi bilgisayarda olursa olsun tüm bilgisayarlarca girilebilir.
sistem server-side olduğu için herhangi bir yetkilendirmeye gerek duyulmamış kendi içinde user_id üzerinden her işleminde kontrol ediyor.
Teşekkür ederim , tokenin içinde password saklamak çok mantıklı bir seçim değil anladığım kadarıyla , çünkü çözümlediğin zaman kullanıcının password'üne ulaşabilir token içinde role , user_id gibi değişkenleri saklamak daha mantıklı olur herhalde hocam doğrumudur ?Elimizde bir JWT token olduğunu farz edelim:
eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjAsInVzZXIiOnsiY3JlYXRlZF9hdCI6IjIwMjMtMTEtMTVUMDc6NTU6MDMuMTg0NTgxWiIsImRlbGV0ZWRfYXQiOiIwMDAxLTAxLTAxVDAwOjAwOjAwWiIsImlkIjoxLCJpc19hY3RpdmUiOnRydWUsIm5hbWUiOiJUZXN0Iiwic3VybmFtZSI6IjEiLCJ0YXhwYXllcl9pZCI6MSwidXBkYXRlZF9hdCI6IjIwMjMtMTEtMTVUMDc6NTU6MDUuMDc4MTAzWiIsInVzZXJuYW1lIjoidGVzdDEifX0.Og4PSRzCygccr3hyEDf1Ct2YX9lx5JSyPEfj_1zsOc6up5q6UNEeo3-OrRgRTIm22ptqKmK7DWnMrDa71uPhug
bunu çözümlediğimizde alttaki JSON'a ulaşırız:
JSON:{ "authorized": true, "exp": 0, "user": { "created_at": "2023-11-15T07:55:03.184581Z", "deleted_at": "0001-01-01T00:00:00Z", "id": 1, "is_active": true, "name": "Test", "surname": "1", "taxpayer_id": 1, "updated_at": "2023-11-15T07:55:05.078103Z", "username": "test1" } }
bu örnekte exp değeri 0 olduğu için herhangi bir expire time yok.
gördüğün üzere user'a dair ne gerekli görüldüyse koyulmuş.
üstteki ey ile başlayan token hangi bilgisayarda olursa olsun tüm bilgisayarlarca girilebilir.
sistem server-side olduğu için herhangi bir yetkilendirmeye gerek duyulmamış kendi içinde user_id üzerinden her işleminde kontrol ediyor.
jwt.io üzerinden bakacak olursan içeriğin değiştirilebileceğini göreceksin e o zaman güvenliği yok bu icadın.
ama var değiştirdikten sonra değiştirilmiş token ile giriş yapmaya çalıştığında malformed hatası alacaksın ve işlem gerçekleştiremeyeceksin.
JWT, Node veya JavaScript ile geliştirilmiş uygulamalar için kullanıcı oturum kaydı. Her kullanıcı girişine benzersiz bir Token oluşturur ve session (oturum) tanımlar.
PHP Session = JS JWT