PHP'de oturum kimliği koruması. Makale Gönderme
Web sitesi güvenliği, oturum yönetimine dayanmaktadır. Bir kullanıcı güvenli bir siteye bağlandığında, genellikle bir kullanıcı adı ve şifre biçiminde kimlik bilgileri sağlar. Web sunucusu, hangi kullanıcının zaten oturum açtığını ve sayfadan sayfaya nasıl gezindiğini bilmiyor. Oturum mekanizması, kullanıcıların her yeni eylem gerçekleştirmek veya yeni bir sayfaya gitmek istediklerinde parola girmek zorunda kalmamalarını sağlar.
Temel olarak, oturum yönetimi, o anda oturum açmış olan kullanıcının bağlı olmasını sağlar. Ne yazık ki, oturumlar, bir web sunucusuna kimlik doğrulama ihtiyacı olmadan erişime izin verebildiklerinden, bilgisayar korsanları için bariz bir hedef haline geldi.
Kullanıcının kimliğini doğruladıktan sonra, web sunucusu ona bir oturum kimliği sağlar. Bu tanımlayıcı tarayıcıda saklanır ve kimlik doğrulama gerektiğinde değiştirilir. Bu, tekrarlayan kullanıcı adı / şifre giriş işlemlerini önler. Bütün bunlar arka planda gerçekleşir ve kullanıcıya herhangi bir rahatsızlık vermez. Her görüntülediğinizde kullanıcı adınızı ve şifrenizi girdiğinizi hayal edin. yeni sayfa!
Bu yazıda PHP'de bir oturum tanımlayıcısını nasıl koruyacağımı bildiğim tüm yolları özetlemeye çalışacağım.
Çerez kullanımı
Varsayılan olarak, kimlik de dahil olmak üzere tüm oturum bilgileri bir tanımlama bilgisine iletilir. Ancak bu her zaman böyle değildir. Bazı kullanıcılar tarayıcılarında çerezleri devre dışı bırakır. Bu durumda tarayıcı, oturum kimliğini URL'ye iletir.Burada kimlik iletilir açık form, bilgilerin HTTP başlığında gizlendiği bir çerez oturumunun aksine. en basit bir şekilde bundan korunma, oturum tanımlayıcısının aracılığıyla iletilmesinin yasaklanması olacaktır. adres çubuğu... Bunu, Apache sunucusunun.htaccess yapılandırma dosyasına aşağıdakileri yazarak yapabilirsiniz:
Php_flag session.use_only_cookies açık
Şifreleme kullanma
Sitenizin kredi kartı numaraları (Sony'den merhaba) gibi hassas bilgileri işlemesi gerekiyorsa, SSL3.0 veya TSL1.0 şifrelemesi kullanmalısınız. Bunu yapmak için, çerezi ayarlarken güvenli parametre için true belirtmelisiniz.Oturum parolasını $ _SESSION değişkeninde saklarsanız (sonuçta sql kullanmak daha iyidir), o zaman onu açık metin olarak saklamamalısınız.
if ($ _SESSION ["şifre"] == $ kullanıcı şifresi) (// kod)
Parola bir oturum değişkeninde düz metin olarak saklandığından yukarıdaki kod güvenli değildir. Bunun yerine md5 şifrelemesini kullanın, bunun gibi bir şey:
if ($ _SESSION ["md5password"] == md5 ($ userpass)) (// kod)
tarayıcı kontrolü
Başka bir tarayıcıdan (bilgisayardan) bir oturum kullanma olasılığını kesmek için, kullanıcı aracısı HTTP başlık alanına bir kontrol girmelisiniz:Oturum_başlangıç(); if (isset ($ _ SESSION ["HTTP_USER_AGENT"])) (if ($ _SESSION ["HTTP_USER_AGENT"]! = md5 ($ _ SERVER ["HTTP_USER_AGENT"])) (// kod)) else ($ _SESSION [" HTTP_USER_AGENT" ] = md5 ($ _ SERVER ["HTTP_USER_AGENT"]);)
Oturum sona erme
Oturum ömrünü ve çerez süresini sınırlayın. Varsayılan olarak, oturum 1440 saniye sona erer. Bu değeri php.ini ve .htaccess ile değiştirebilirsiniz. .htaccess için örnek:# Saniye cinsinden oturum ömrü
php_value session.gc_maxlifetime 3600
# Saniye cinsinden çerez ömrü
php_value session.cookie_lifetime 3600
IP adresine göre bağlama
Belirli durumlarda (her zaman değil), IP adresine göre bağlamanız gerekir. Çoğunlukla kullanıcı sayısı sınırlı olduğunda ve statik IP'ye sahip olduğunda. Kontrol, izin verilen IP adresleri listesine karşı olabilir,Dahil et ("ip_list.php"); // $ ip_white_list = dizi ("admin1" => "111.222.333.444", "admin2" => "555.666.777.888"); if (! boş (array_search ($ _ SUNUCU ["REMOTE_ADDR"], $ ip_white_list))) (başlık ("Konum: admin.php"));) else (echo "ERİŞİM ENGELLE!";)
Veya her istek için IP adresine göre (yalnızca statik IP'ler için):
if (isset ($ _ SESSION ["ip"]) ve $ _SESSION ["ip"] == $ _SERVER ["REMOTE_ADDR"]) (başlık ("Konum: admin.php");) else (session_unset (); $ _SESSION ["ip"] = $ _SERVER ["REMOTE_ADDR"];)
Bilgisayar korsanlığından tamamen kaçınmanın imkansız olduğunu bilmelisiniz. Bu hacklemeyi ancak bilinen herhangi bir yolla mümkün olduğu kadar zorlaştırabilirsiniz. Ancak, bu tür bir koruma ile hayatlarını zorlaştırmamak için yasal kullanıcılarınızı da unutmamalısınız.
Bu makale 2009 yılında yazılmıştır ve en popüler yazılarımızdan biri olmaya devam etmektedir. PHP ve MySQL hakkında daha fazla bilgi edinmek istiyorsanız, bunu çok ilgi çekici bulabilirsiniz.
NOT: Bu makale PHP 4.2 veya sonraki sürümlerde çalışacak şekilde yeni güncellendi!
Geçenlerde bir grup insanla küçük bir proje üzerinde çalışma fırsatım oldu. O e-postanın tek başına herkesi döngüde tutmak için yeterli olmayacağına erken karar vermiştik, bu yüzden proje için küçük bir Web sitesi oluşturmakla görevlendirildim. Basit bir mesaj panosu, ekibin geri kalanının kullanması için belgeleri ve diğer dosyaları yükleyebileceğimiz bir yer ve çeşitli ekip üyelerinin iletişim bilgilerini içerecektir.
Bu özelliklerin birçoğunun çalışması için, sitenin ilgili bölümlerine erişmeden önce kullanıcıların giriş yapması gerektiğini biliyordum. İhtiyacım olan, kullanıcıların siteye erişmek için bir kullanıcı kimliğine kaydolmalarını ve ardından herhangi bir müdahalem olmadan bu kimliği hemen kullanmalarını sağlayacak bir sistemdi.
Bu yazıda, ilk yarıdan başlayarak kullanıcı kayıt süreci ile birlikte geliştirdiğim sistemin bir özetini sunacağım. İkinci yarıda, sitenin kendisine, kullanıcıların nasıl oturum açmasını gerektirdiğine ve ardından ziyaretleri boyunca oturum açma durumunu nasıl koruduğuna odaklanacağım. PHP'de oturum yönetimi özelliklerinin kullanımına özellikle dikkat edeceğim. Sonunda, kendinize ait benzer bir sistemi uygulamak için ihtiyacınız olan tüm bilgilere sahip olmalısınız.
Bu makale boyunca, PHP diline, bir PHP betiğine bilgi göndermek için formların kullanımına ve PHP'nin bir MySQL veritabanıyla etkileşimde bulunmak için nasıl kullanılabileceğine ilişkin temel bir aşinalığa sahip olduğunuzu varsayacağım. Bunlardan herhangi biri size yabancı kavramlarsa, bir önceki yazımı okuyarak başlamalısınız.
Birinci Bölüm: Kayıt Süreci
Kayıt Formu
Kullanıcıların erişim için kaydolmasını gerektiren bir site oluşturmaya başlamak için doğal bir yer, kayıt işleminin kendisidir. Beklendiği gibi, basit bir Web tabanlı form hile yapacak. İşte nasıl görüneceği:
Ve işte bu formun kodu:
Yeni Kullanıcı Kayıt Formu
* Bir alanın zorunlu olduğunu gösterir
Aslında bu forma zaten gömülü bir PHP kodu parçası var:
Yukarıdaki giriş formu gönderildiğinde, sayfa bu sefer $ uid ve $ pwd değişkenleri kullanıcının ID ve şifresine ayarlanmış olarak yeniden yüklenecektir. Yukarıdaki akış şemasına göre bir sonraki adım, bunları oturum değişkenleri olarak kaydetmek ve bunların kullanıcının bu ziyaret sırasında görüntülediği diğer tüm korumalı sayfalarda kullanılabilir olmasını sağlamaktır. Bu noktada, komut dosyasının girilen kullanıcı kimliği ve parolanın geçerli olup olmadığını hala bilmediğini unutmayın. Senaryonun işleri neden bu sırayla yaptığını birazdan açıklayacağım.
$ _SESSION ["uid"] = $ kullanıcı kimliği; $ _SESSION ["pwd"] = $pwd;
Kullanıcı kimliği ve parolanın geçerli olup olmadığını öğrenmek için komut dosyası, eşleşen girişler için veritabanını arar. SELECT sorgusunda, MySQL'in PASSWORD işlevini kullanarak $ pwd değişkenini, aynı zamanda kodlanmış olan saklanan parolayla eşleştirmek için kodladım. Burada kendi veritabanı adınızı kullandığınızdan emin olun - maden oturumlarını aradım - ve hata mesajında kendi e-posta adresinizi.
DbConnect (" oturumlar"); $ sql =" SELECT * FROM user WHERE userid = "$ uid" AND password = PASSWORD ("$ pwd") "; $ sonuç = mysql_query ($ sql); if (! $ sonuç) (hata (" A "." oturum açma bilgileriniz kontrol edilirken veritabanı hatası oluştu. \ nBu hata devam ederse lütfen "." ile iletişime geçin [e-posta korumalı] ."); }
Veritabanında eşleşen satır bulunamazsa, sağlanan oturum açma ayrıntıları yanlıştır. Komut dosyası bunu mysql_num_rows işlevini kullanarak kontrol eder ve siteye erişimi reddeden ve kullanıcıyı yeniden oturum açmayı denemeye davet eden bir mesaj görüntüler. Bunu mümkün kılmak için, komut dosyası ayrıca iki oturum değişkeninin ($ _SESSION ["uid"] ve $ _SESSION ["pwd"]) kaydını siler, böylece komut dosyası bir sonraki çalıştırılışında oturum açma formunu görüntüler. Değişkenler, geçerlilikleri kontrol edilmeden önce komut dosyasında daha önce kaydedildiğinden, komut dosyasının kaydını silmeye çalışmadan önce kayıtlı olup olmadıklarını kontrol etmesi gerekmez.
if (mysql_num_rows ($ sonuç) == 0) (unset ($ _ SESSION ["uid"]); unset ($ _ SESSION ["pwd"]);?>
Erişim reddedildi
Kullanıcı kimliğiniz veya şifreniz yanlış veya bu sitede kayıtlı bir kullanıcı değilsiniz. Tekrar oturum açmayı denemek için "> burayı tıklayın. Anında erişim için kaydolmak için burayı tıklayın.
Oturum açma ayrıntıları oturum değişkenleri olarak saklandığına ve geçerliliği kontrol edildiğine göre, komut dosyası istenen sayfaya güvenli bir şekilde erişim verebilir. Accesscontrol.php'yi sonlandırmadan ve kontrolü korumalı sayfaya geri vermeden önce yaptığım son şey, daha önce oluşturulan MySQL sonuç kümesinde bulunan kullanıcının tam adını almaktır. Bunun bir oturum değişkeni olarak kaydedilmesi gerekmez, çünkü oturumda depolanan "uid" ve "pwd" değerleri kullanılarak korunan her sayfa tarafından tekrar alınır.
$ kullanıcı adı = mysql_result ($ sonuç, 0, "tam ad"); ?>
Bu, accesscontrol.php'yi ve onunla birlikte erişim kontrol sistemini tamamlar! Yinelemek gerekirse, artık herhangi bir sayfa, komut dosyasının en üstüne accesscontrol.php eklenerek yalnızca üyelere özel erişimle sınırlandırılabilir. Kullanıcının adını görüntülemek için $ username değişkenini kullanan çok basit bir örnek:
Hoş geldin,=$username?>! Sitenin üyelere özel alanına girdiniz. Kendini özel hissetmiyor musun?
Sarmak
Bu noktada, size basit bir erişim kontrol sisteminin tüm özelliklerini sağladım. İşte bir oyun indirmeniz için bir ZIP dosyasında! Kendi sunucunuzda kullanmak için bazı şeyleri değiştirmeniz gereken yerlerin tümü aşağıda belirtilmiştir. gözü pek Bu makalede.
Yine de eklenecek birkaç şey var:
- Kullanıcıların parolalarını, e-posta adreslerini ve kullanıcı profillerinizde saklamak istediğiniz diğer seçenekleri ve bilgileri değiştirebilecekleri bir sayfa. Bu açıkça üyelere özel bir sayfa olacak ve $ uid değişkeni, veritabanında hangi kaydın güncelleneceğini belirlemede kullanışlı olacaktır.
- Kullanıcının kendisine e-postayla gönderilen oturum açma bilgilerini unutmasını sağlayacak bir "bana şifremi gönder" özelliği. Tabii ki, bu özelliği uygulamak istiyorsanız MySQL'in ŞİFRE işlevi kullanılarak şifrelenmiş şifreleri saklayamazsınız (çünkü ŞİFRE geri alınamayan tek yönlü bir işlemdir). Daha fazla güvenlik istiyorsanız, kullanıcının kayıt sırasında unuttuğu bir parolayı almak için yanıtlaması gereken bir soru seçtiği şemalardan birini uygulayabilirsiniz.
- HTML olmayan dosyalara yalnızca üye erişimi. PHP eşit olarak gönderme yeteneğine sahip olduğundan HTML ve ikili bilgi, yalnızca geçerli oturumda doğru bir $ uid / $ pwd kombinasyonu bulunursa istenen dosyayı alacak bir doğrudan geçiş komut dosyası oluşturabilirsiniz.
Bunlar başlamanıza yardımcı olacak birkaç fikir, eminim daha heyecan verici fikirler düşünebilirsiniz. Onları bir egzersiz olarak tamamlamanız için bırakacağım, ancak sıkışırsanız yardım istemek için uğramaktan çekinmeyin!
Bu gönderiyi okumaktan zevk aldıysanız, Öğrenilebilir'i seveceksiniz; ustalardan yeni beceriler ve teknikler öğrenebileceğiniz yer. Üyeler, SitePoint'in tüm e-kitaplarına ve PHP ve Yeni Başlayanlar için MySQL Web Geliştirme gibi etkileşimli çevrimiçi kurslarına anında erişim elde eder.
Kevin Yank başarılı bir web geliştiricisi, konuşmacısı, eğitmeni ve PHP ve MySQL Kullanarak Kendi Veritabanına Dayalı Web Sitenizi Oluşturun kitabının yazarı ve Simply JavaScript ve CSS Hakkında Bildiğiniz Her Şey Yanlış! Kevin bilgi zenginliğini paylaşmayı seviyor ve bu "kitaplarda bitmedi", aynı zamanda web geliştirmede 3 çevrimiçi kursun kurs eğitmeni. Şu anda Kevin, Culture Amp'de Ön Uç Mühendisliği Direktörüdür.
PHP'deki oturumlar veya sitenin sayfaları arasında gezinirken siteye giren bir kullanıcı veya müşteri hakkındaki verilerin çok fazla zorlanmadan nasıl kaydedildiği. Ders çok önemlidir. Sitelerin %95'inin oluşturulmasıyla ilgilidir.
php'de oturum nedir
Oturumlar, aynı sitenin sayfaları arasında gezinirken geçici veriler (örneğin, kullanıcının siteye girdiği) hakkındaki bilgileri depolamak için kullanılır. Oturumları kullanırken, veriler sunucudaki geçici dosyalara kaydedilir.Çoğu zaman, çevrimiçi mağazalar, forumlar, mesaj panoları oluştururken oturumlar (ve çerezler de) kullanılır. sosyal ağlar, bloglar ve diğer kaynaklar. Oturum sisteminin kolaylığı, oturum açmış olan kullanıcının/alıcının, verilerinin içinde bulunduğu geçici bilgilerinin saklanmasıdır. hızlı erişim kesin zaman... Oturumun doğal bir sona erme tarihi vardır - tarayıcı kapanana kadar. Yalnızca sayfayı kapatırsanız, siteyi açtığınızda, kullanıcı / alıcı ile ilgili veriler yine mevcut olacaktır.
Oturum mantığı
Oturum (veya oturum) bir tür geçici veri depolamadır. Sizi hemen uyarıyorum, az miktarda veri kaydetmeye değer. Örneğin, oturum açan kullanıcının oturum açma adı ve parolası veya veritabanındaki seri numarası.iş örneği
1.
Kullanıcı bir kullanıcı adı ve şifre girer ve siteye girer
2.
Giriş ve şifre ile veriler, sitenin sayfalarından birinin oturumuna kaydedilir:
Dosya index.php
Oturum_başlangıç(); // oturum verilerini kullanmak istediğiniz her dosya, kodun başında "oturum başlat" komutunu içermelidir
$ giriş = "yönetici";
$ şifre = "geç";
$ _SESSION ["giriş"] = $ giriş; // oturum açmayı içeren değişkeni kaydedin
$ _SESSION ["şifre"] = $ şifre; // şifreyi içeren değişkeni kaydet
3. Sitenin başka bir sayfasına gittiğinizde bu veriler de mevcut olacaktır:
Dosya örnek.php(veya başka bir sayfa)
Echo "Giriş bilgileriniz" $ _ SESSION ["giriş"]; // Bu sayfada veri kaydetmemiş olmamıza rağmen, "Girişiniz admin" görüntülenecektir!
Bak, çok basit!
4. Oturum verilerini silmek istiyorsanız, bu yeterlidir:
Dosya örnek.php
Oturum_başlangıç(); // "oturumu yeniden başlat"
Ayarlanmadı ($ _ SESSION ["giriş"]); // değişken bu şekilde kayıtlı değil veya "yok edildi"
echo "Giriş bilgileriniz" $ _ SESSION ["giriş"]; // "Oturum açma bilgileriniz" görüntülenecektir. Son satırda yok ettiğimiz için veri de yok.
Session_destroy(); // oturumu yok et. $ _SESSION ["şifre"] dahil tüm veriler gitti. İstendiğinde, bir hata görüntülenecektir
Genel olarak, böyle bir transfer şuna benzer: POST yöntemi, ancak artık çok fazla gereksiz kod yazmak zorunda değilsiniz ve sayfadan sayfaya aktarılan tüm veriler sunucudaki geçici dosyalarda saklanır. Yine, oturumlar az miktarda veri içermelidir, bu nedenle kullanıcı adı / şifre, alışveriş sepeti ve diğer küçük hacimleri depolamak için uygundur.
PHP oturumu kullanarak bir değer veya dizi geçirme
Bir oturumda, yalnızca bir dize değil, aynı zamanda bir dizi veri de yazabilirsiniz. Sadece dizinin boyutuyla aşırıya kaçmayın, çünkü tüm bunlar sunucudaki performansı ve işgal edilen alanı etkileyecektir.Biz yine belirli bir başlangıç sayfası index.php
Oturum_başlangıç();
$ r = dizi ("bir", "iki", "üç");
$ _SESSION ["dizi"] = $r;
Her şeyin görüntülendiği sayfaya
Verileri oturumda kaydettik ve tüm verileri göstereceğimiz başka bir sayfanın bağlantısını takip ettik.
Dosya alıcısı, sayfa test.php diziyi nerede açıyoruz
Oturum_başlangıç();
print_r ($ _ OTURUM ["dizi"]);
// çıktı alacak
/*
Dizi
=> bir
=> iki
=> üç
*/
?>
Bir öğretici üzerinde tazelemek isteyebilirsiniz. Genel olarak, her şey açık olmalıdır.
Oturumlarla çalışmak için diğer işlevler
session_unregister (dize)- oturum belirtilen global değişkenin değerini unutur;session_destroy ()- oturum kapatılır (örneğin, kullanıcı sistemden çıkış düğmesine basarak sistemden ayrıldıysa);
session_set_cookie_params (int ömür boyu [, string yolu [, string etki alanı]])- bu işlevi kullanarak, oturumun ölüm zamanını belirleyen unix_timestamp ayarını yaparak oturumun ne kadar süreceğini ayarlayabilirsiniz.
PHP'de oturumlarla (oturum) çalışmak için işlevlerin listesi
session_cache_expire - Geçerli önbelleğin sona erme tarihini döndürür
session_cache_limiter - Geçerli önbellek sınırını al ve/veya ayarla
session_commit - session_write_close () için bir takma ad
session_decode - Dizedeki oturum verilerinin kodunu çözer
session_destroy - Oturum için kayıtlı tüm verileri yok eder
session_encode - geçerli oturum verilerini bir dize olarak şifreler
session_get_cookie_params - Oturum tanımlama bilgisi parametrelerini alır
session_id - geçerli oturum kimliğini alır ve/veya ayarlar
session_is_registered - oturumda bir değişkenin kayıtlı olup olmadığını belirler
session_module_name - Geçerli oturum için modülü al ve/veya kur
session_name - geçerli oturumun adını alır ve/veya ayarlar
session_regenerate_id - Mevcut oturum kimliğini yeni oluşturulan ile değiştirir
session_register - geçerli oturum için bir veya daha fazla değişken kaydeder
session_save_path - geçerli oturumu kaydetme yolunu alır ve/veya ayarlar
session_set_cookie_params - oturum tanımlama bilgisi parametrelerini ayarlar
session_set_save_handler - kullanıcı düzeyinde oturum depolama işlevlerini ayarlar
session_start - oturum verilerini başlatır
session_unregister - Geçerli oturumdaki bir değişkenin kaydını siler
session_unset - Tüm oturum değişkenlerini serbest bırakır
session_write_close - Oturum verilerini ve oturumun sonunu yazar
Oturum örnekleri
Oturum sırasındaki sayfa görüntüleme sayacı. Açıklayıcı bir çalışma örneği. Ancak, tarayıcıyı kapattıktan sonra geri sayım yeniden başlayacaktır.Bir oturumda bir sayfaya yapılan ziyaretlerin sayacı
// Çerezler olmadan oturum kullanmanın basit bir örneği.
oturum_adı ("deneme");
oturum_başlangıç();
$ _SESSION ["sayım"] = @ $ _ SESSION ["sayım"] + 1;
?>
Tezgah
Tarayıcıyla yapılan mevcut çalışma oturumunda bu sayfayı açtınız
=$_SESSION["count"]?>zamanlar).
Bu sayacı sıfırlamak için tarayıcınızı kapatın.
Sayfayı yenilemek için buraya tıklayın!
Her geçişte sayaç 1 artacaktır.
Dikkatiniz için teşekkürler! Çalışmalarınızda iyi şanslar!
Merhaba sevgili topluluk.
Öncelikle çok faydalı bir kaynak olduğu için teşekkür etmek istiyorum. Bir kereden fazla burada birçok ilginç fikir ve pratik tavsiye buldum.
Bu makalenin amacı, PHP'de oturum kullanmanın tuzaklarını vurgulamaktır. Tabii ki, PHP belgeleri ve bir ton örnek var ve bu makalenin amacı bu değil. eksiksiz rehber... Oturumlarla çalışmanın bazı nüanslarını ortaya çıkarmak ve geliştiricileri gereksiz yere zaman kaybetmekten korumak için tasarlanmıştır.
Oturumlar için en yaygın kullanım durumu, elbette, kullanıcı yetkilendirmesidir. Yeni zorluklar ortaya çıktıkça tutarlı bir şekilde geliştirebilmemiz için en temel uygulamayla başlayalım.
(Yerden ve zamandan tasarruf etmek için, burada güzel bir sınıf hiyerarşisi, kapsamlı hata işleme ve diğer doğru şeyler ile tam teşekküllü bir test uygulaması oluşturmak yerine, örneklerde kendimizi yalnızca oturumlarla çalışmanın işlevleriyle sınırlayacağız).
startSession () işlevi (// Oturum zaten başlatılmışsa, yürütmeyi durdurun ve TRUE döndürün // (php.ini ayarlar dosyasındaki session.auto_start parametresi devre dışı bırakılmalıdır - varsayılan değer) if (session_id ()) return true; else return session_start (); // Not: 5.3.0 sürümünden önce, session_start () işlevi hata durumunda bile DOĞRU döndürdü. // 5.3.0'ın altında bir sürüm kullanıyorsanız, ek doğrulama session_id yapın ( ) // session_start() işlevini çağırdıktan sonra destroySession() (if (session_id())) (// Varsa aktif oturum, oturum çerezlerini sil, setcookie (session_name()), session_id(), time() - 60*60*24); // ve session_unset() oturumunu yok et; session_destroy(); ))
Not: Okuyucunun temel PHP oturumları bilgisine sahip olduğu varsayıldığından, session_start() ve session_destroy() işlevlerinin nasıl çalıştığını ele almayacağız. Oturum açma formunun düzeni ve kullanıcı doğrulama görevleri makalenin konusu ile ilgili değildir, bu yüzden onları da atlayacağız. Size hatırlatmama izin verin, sonraki her istekte kullanıcıyı tanımlamak için, başarılı oturum açma anında, kullanıcı kimliğini sonraki tüm sürümlerde kullanılabilecek bir oturum değişkenine (örneğin, kullanıcı kimliği adıyla) kaydetmemiz gerekir. oturumun ömrü boyunca istekler. Ayrıca startSession() fonksiyonumuzun sonucunun işlenmesini de uygulamak gerekiyor. İşlev YANLIŞ döndürürse, oturum açma formunu tarayıcıda görüntüleyin. İşlev DOĞRU döndürürse ve yetkili kullanıcının tanımlayıcısını (bizim durumumuzda kullanıcı kimliği) içeren oturum değişkeni varsa, yetkili kullanıcının sayfasını görüntüleyin (hata işleme hakkında daha fazla ayrıntı için, 2013-06-'den itibaren eke bakın). 07, oturum değişkenleri bölümünde).
Buraya kadar her şey açık. Sorular, kullanıcı hareketsizliği (oturum zaman aşımı) denetiminin uygulanması, birkaç kullanıcının aynı anda tek bir tarayıcıda çalışmasına ve ayrıca oturumların yetkisiz kullanıma karşı korunması gerektiğinde başlar. Bu konuya aşağıda tekrar değinilecektir.
Yerleşik PHP araçlarıyla kullanıcı hareketsizliğini kontrol etme
Kullanıcılar için her türlü konsolun geliştiricileri arasında sıklıkla ortaya çıkan ilk soru, kullanıcının herhangi bir işlem yapmaması durumunda oturumun otomatik olarak sonlandırılmasıdır. PHP'nin yerleşik yeteneklerini kullanmaktan daha kolay olamazdı. (Bu seçenek çok güvenilir ve esnek değildir, ancak eksiksiz olması için düşünelim).fonksiyon startSession () (// Kullanıcı hareketsizlik zaman aşımı (saniye olarak) $ sessionLifetime = 300; if (session_id ()) return true; // Çerez ömrünü ayarlayın ini_set ("session.cookie_lifetime", $ sessionLifetime); // Eğer kullanıcı hareketsizliği zaman aşımı ayarlandı, sunucuda oturum ömrünü ayarlayın // Not: Bir üretim sunucusu için, php.ini dosyasında bu parametreleri önceden ayarlamanız önerilir if ($ sessionLifetime) ini_set ("session.gc_maxlifetime", $ sessionLifetime ); if (session_start ( )) (setcookie (session_name (), session_id (), time () + $ sessionLifetime); true döndürme;) yoksa false döndürme;)
Birkaç açıklama. Bildiğiniz gibi PHP, tarayıcı tarafından istek başlığında iletilen çerezin adıyla hangi oturumun başlayacağını belirler. Tarayıcı da bu tanımlama bilgisini session_start() işlevinin yerleştirdiği sunucudan alır. Çerezin tarayıcıda süresi dolmuşsa, istekte iletilmez, bu da PHP'nin hangi oturumun başlayacağını belirleyemeyeceği ve bunu yeni bir oturum oluşturma olarak kabul edeceği anlamına gelir. Parametre PHP ayarları Kullanıcı hareketsizliği zaman aşımına ayarlanan session.gc_maxlifetime, PHP oturum ömrünü ayarlar ve sunucu tarafından izlenir. Oturum yaşam boyu denetimi aşağıdaki gibi çalışır (burada PHP'deki en yaygın ve varsayılan sürüm olarak geçici dosyalardaki bir oturum depolama örneğini ele alıyoruz).
Yeni bir oturum oluşturulurken, PHP ayarları parametresi session.save_path içinde oturumları depolamak için dizin olarak ayarlanan dizinde sess_ adlı bir dosya oluşturulur.
Not: Burada, session.gc_maxlifetime parametresinin bir sunucu içindeki (daha doğrusu, bir ana PHP işlemi içindeki) tüm oturumları etkilediğine dikkat edilmelidir. Pratikte bu, sunucuda birkaç site çalışıyorsa ve her birinin kendi kullanıcı hareketsizliği zaman aşımına sahip olması durumunda, bu parametrenin sitelerden birine ayarlanması, diğer siteler için de yüklenmesine yol açacağı anlamına gelir. Aynı şey paylaşılan barındırma için de geçerlidir. Bu durumdan kaçınmak için, bir sunucu içindeki her site için ayrı oturum dizinleri kullanılır. Oturum dizinine giden yolun ayarlanması, php.ini ayarlar dosyasındaki session.save_path parametresi kullanılarak veya ini_set () işlevi çağrılarak yapılır. Bundan sonra, her sitenin oturumları ayrı dizinlerde saklanacak ve sitelerden birinde ayarlanan session.gc_maxlifetime parametresi yalnızca oturumu için geçerli olacaktır. Özellikle stokta kullanıcının hareketsizliğini kontrol etmek için daha esnek bir seçeneğe sahip olduğumuz için bu durumu ayrıntılı olarak ele almayacağız.
Oturum değişkenlerini kullanarak kullanıcı hareketsizliğini kontrol etme
Görünüşe göre önceki seçenek, tüm basitliği için (sadece birkaç ek kod satırı) ihtiyacımız olan her şeyi veriyor. Ama ya her istek, kullanıcı etkinliğinin bir sonucu olarak kabul edilemezse? Örneğin, sayfanın sunucudan güncellemeleri almak için periyodik olarak bir AJAX isteğinde bulunan bir zamanlayıcısı vardır. Bu tür bir istek, kullanıcı etkinliği olarak kabul edilemez; bu, bu durumda oturum ömrünün otomatik olarak uzatılmasının doğru olmadığı anlamına gelir. Ancak, PHP'nin, session_start () işlevine yapılan her çağrıyla, oturum dosyası değiştirme zamanını otomatik olarak güncellediğini biliyoruz; bu, herhangi bir isteğin oturum ömrünün uzamasına yol açacağı ve kullanıcının hareketsizlik zaman aşımının asla gerçekleşmeyeceği anlamına gelir. Ayrıca, session.gc_maxlifetime parametresinin incelikleriyle ilgili önceki bölümdeki son not, uygulanması çok kafa karıştırıcı ve karmaşık görünebilir.Bu sorunu çözmek için, yerleşik PHP mekanizmalarını kullanmayı bırakacağız ve kullanıcı hareketsizliği zamanını kendi başımıza kontrol etmemize izin verecek birkaç yeni oturum değişkeni tanıtacağız.
startSession ($ isUserActivity = true) ($ sessionLifetime = 300; if (session_id ()) return true; // Çerez ömrünü tarayıcı kapanana kadar ayarlayın (her şeyi sunucu tarafında kontrol edeceğiz) ini_set ("session.cookie_lifetime" ", 0) ; if (! session_start ()) return false; $ t = zaman (); if ($ sessionLifetime) (// Kullanıcı hareketsizlik zaman aşımı ayarlanmışsa, // son kullanıcı etkinliğinden bu yana geçen süreyi kontrol edin / / (lastactivity oturum değişkeni güncellendiğinde son isteğin zamanı) if (isset ($ _ SESSION ["lastactivity"]) && $ t - $ _ SESSION ["lastactivity"]> = $ sessionLifetime) (// son kullanıcı etkinliğinin üzerinden geçen süre // daha fazla hareketsizlik zaman aşımı, oturumun süresi dolmuştur ve oturumu sonlandırmanız gerekir destroySession(); return false;) else (// Zaman aşımı henüz gerçekleşmediyse, // ve eğer istek, kullanıcı etkinliğinin bir sonucu olarak geldi, // lastactivity değişkenini mevcut vr'nin değeriyle güncelleyin emeny, // böylece oturum süresini başka bir oturumla uzatırÖmür boyu saniye if ($ isUserActivity) $ _SESSION ["lastactivity"] = $ t; )) true döndür; )
Özetleyelim. Her istekte, son kullanıcı etkinliğinin olduğu andan içinde bulunulan ana kadar zaman aşımına ulaşılıp ulaşılmadığını kontrol ederiz ve ulaşılırsa, FALSE döndürerek oturumu yok eder ve işlevin yürütülmesini durdururuz. Zaman aşımına ulaşılmamışsa ve TRUE değerine sahip $ isUserActivity parametresi fonksiyona geçirilmişse, son kullanıcı etkinliğinin zamanını güncelliyoruz. Tek yapmamız gereken, çağrı komut dosyasında isteğin kullanıcı etkinliğinin sonucu olup olmadığını belirlemek ve değilse, $ isUserActivity parametresinin değeri FALSE'e eşit olan startSession işlevini çağırmaktır.
2013-06-07 itibariyle güncellemesessionStart () işlevinin sonucunun işlenmesi
Yorumlarda, YANLIŞ döndürmenin hatanın nedenini tam olarak anlamadığını fark ettik ve bu kesinlikle doğru. Burada ayrıntılı hata işlemeyi yayınlamadım (makalenin hacmi zaten küçük değil), çünkü bu doğrudan makalenin konusuyla ilgili değil. Ama yorumlara göre açıklayacağım.
Gördüğünüz gibi, sessionStart işlevi iki durumda FALSE döndürebilir. Bazı dahili sunucu hataları (örneğin, php.ini'deki yanlış oturum ayarları) nedeniyle oturum başlatılamadı veya oturumun süresi doldu. İlk durumda, kullanıcıyı sunucuda sorun olduğuna dair bir hata içeren bir sayfaya ve bir desteğe başvurma şekline yönlendirmemiz gerekir. İkinci durumda, kullanıcıyı oturum açma formuna aktarmalı ve içinde oturumun sona erdiğini belirten ilgili bir mesaj göstermeliyiz. Bunun için hata kodlarını girip FALSE yerine karşılık gelen kodu döndürmemiz ve call method'da kontrol edip ona göre hareket etmemiz gerekiyor.
Şimdi, sunucudaki oturum hala mevcut olsa bile, kullanıcı hareketsizlik zaman aşımı süresi dolmuşsa, ilk erişildiğinde yok edilecektir. Ve bu, global PHP ayarlarında hangi oturum ömrünün ayarlandığına bakılmaksızın gerçekleşecektir.
Not: Tarayıcı kapatılırsa ve oturum adı tanımlama bilgisi otomatik olarak yok edilirse ne olur? Tarayıcının bir sonraki açılışında sunucuya yapılan istek, oturum tanımlama bilgilerini içermeyecek ve sunucu bir oturum açamayacak ve kullanıcının hareketsizliğinin zaman aşımını kontrol edemeyecektir. Bizim için bu, yeni bir oturum oluşturmakla eşdeğerdir ve işlevselliği veya güvenliği hiçbir şekilde etkilemez. Ancak adil bir soru ortaya çıkıyor - zaman aşımı sona erdikten sonra şimdiye kadar yok ettiysek, eski oturumu kim yok edecek? Yoksa sonsuza kadar oturum dizininde mi kalacak? PHP'nin eski oturumları temizlemek için çöp toplama adı verilen bir mekanizması vardır. Sunucuya bir sonraki istekte başlar ve tüm eski oturumları, oturum dosyalarının son değişiklik tarihine göre temizler. Ancak sunucuya yapılan her istekte çöp toplama mekanizması başlamaz. Başlatma sıklığı (daha doğrusu olasılık), session.gc_probability ve session.gc_divisor adlı iki ayar parametresi tarafından belirlenir. Birinci parametrenin ikinciye bölünmesinin sonucu, çöp toplama mekanizmasının başlama olasılığıdır. Bu nedenle, sunucuya yapılan her istekte oturum temizleme mekanizmasının başlaması için bu parametrelerin eşit değerlere, örneğin "1"e ayarlanması gerekir. Bu yaklaşım, oturum dizininin temiz olmasını sağlar, ancak açıkçası sunucu için çok fazla yüktür. Bu nedenle, üretim sistemlerinde session.gc_divisor varsayılan olarak 1000'e ayarlanmıştır; bu, çöp toplama motorunun 1/1000 olasılıkla başlayacağı anlamına gelir. Bu ayarları php.ini dosyanızda denerseniz, yukarıdaki durumda, tarayıcı kapandığında ve tüm çerezlerini temizlediğinde, oturum dizininde bir süreliğine hala eski oturumlar olduğunu fark edeceksiniz. Ama bu seni endişelendirmemeli, çünkü daha önce de belirtildiği gibi, bu hiçbir şekilde mekanizmamızın güvenliğini etkilemez.
2013-06-07 itibariyle güncellemeOturum dosyasının engellenmesi nedeniyle komut dosyalarının askıda kalmasını önleme
Yorumlarda, oturum dosyasının engellenmesi nedeniyle aynı anda çalışan komut dosyalarının donması sorununu gündeme getirdiler (en parlak seçenek olarak - uzun anket).
Başlangıç olarak, bu sorunun doğrudan sunucu yüküne veya kullanıcı sayısına bağlı olmadığını not ediyorum. Tabii ki, ne kadar çok istek olursa, betikler o kadar yavaş çalışır. Ancak bu dolaylı bir bağımlılıktır. Sorun yalnızca bir oturumda, sunucu bir kullanıcı adına birkaç istek aldığında ortaya çıkar (örneğin, bunlardan biri uzun ankettir ve geri kalanı sıradan isteklerdir). Her istek aynı oturum dosyasına erişmeye çalışır ve önceki istek dosyanın kilidini açmadıysa, bir sonraki istek askıda kalır.
Oturum dosyalarını engellemeyi minimumda tutmak için, oturum değişkenleriyle tüm eylemler gerçekleştirildikten hemen sonra session_write_close () işlevini çağırarak oturumu kapatmanız şiddetle önerilir. Pratikte bu, her şeyi oturum değişkenlerinde saklamamanız ve betiğin yürütülmesi boyunca bunlara başvurmanız gerektiği anlamına gelir. Ve bazı çalışma verilerini oturum değişkenlerinde depolamak gerekirse, oturumun başında hemen okuyun, daha sonra kullanmak üzere yerel değişkenlere kaydedin ve oturumu kapatın (yani, oturumu session_write_close işlevini kullanarak kapatmak ve oturumu kapatmak değil). session_destroy kullanarak).
Örneğimizde bu, bir oturumu açtıktan hemen sonra, oturumun ömrünü ve yetkili bir kullanıcının varlığını kontrol ettikten sonra, uygulama için gerekli tüm ek oturum değişkenlerini (varsa) okuyup kaydetmemiz, ardından oturumu session_write_close () kullanarak kapatmamız gerektiği anlamına gelir. ) uzun bir anket veya normal bir istek olsun, bir komut dosyasının yürütülmesini çağırın ve devam ettirin.
Oturumları yetkisiz kullanıma karşı koruma
Bir durum hayal edelim. Kullanıcılarınızdan biri, tarayıcı tanımlama bilgisini (oturumumuzun depolandığı) çalan ve belirtilen e-postaya gönderen bir Truva Atı takar. Saldırgan bir tanımlama bilgisi alır ve bunu yetkili kullanıcımız adına bir istekte bulunmak için kullanır. Sunucu, bu isteği yetkili bir kullanıcıdan gelmiş gibi başarıyla kabul eder ve işler. IP adresinin ek doğrulaması uygulanmazsa, böyle bir saldırı, tüm sonuçlarıyla birlikte kullanıcının hesabının başarılı bir şekilde hacklenmesine yol açacaktır.Bu neden mümkün? Açıkça, ad ve oturum tanımlayıcısı, oturumun tüm ömrü boyunca her zaman aynı olduğundan ve bu verileri alırsanız, başka bir kullanıcı adına özgürce istek gönderebilirsiniz (doğal olarak, bu oturumun ömrü boyunca). Belki de bu en yaygın saldırı türü değildir, ancak teoride her şey oldukça uygun görünüyor, özellikle böyle bir Truva Atı'nın kullanıcının tarayıcı çerezlerini soymak için yönetici haklarına bile ihtiyacı olmadığı düşünüldüğünde.
Bu tür saldırılara karşı nasıl savunma yapabilirsiniz? Yine, açıkçası, oturum tanımlayıcısının ömrünü sınırlayarak ve tanımlayıcıyı bir oturumda periyodik olarak değiştirerek. Ayrıca oturumun adını değiştirebilir, eskisini tamamen silip yeni bir oturum oluşturarak, tüm oturum değişkenlerini eskisinden ona kopyalayabiliriz. Ancak bu, yaklaşımın özünü etkilemez, bu nedenle basitlik için kendimizi yalnızca oturum tanımlayıcısıyla sınırlayacağız.
Oturum tanımlayıcısının ömrü ne kadar kısa olursa, bir saldırganın bir kullanıcının isteğini oluşturmak için çerezleri almak ve kullanmak için o kadar az zaman alacağı açıktır. İdeal olarak, her istek için başka birinin oturumunu kullanma olasılığını en aza indirecek yeni bir tanımlayıcı kullanılmalıdır. Ancak, oturum kimliğini yeniden oluşturma zamanının keyfi olarak ayarlandığı genel durumu ele alacağız.
(Kodun daha önce tartışılmış olan kısmını çıkaralım).
fonksiyon startSession ($ isUserActivity = true) (// Oturum Kimliği ömrü $ idLifetime = 60; ... if ($ idLifetime) (// Oturum kimliği yaşam süresi ayarlanmışsa, // oturumun oluşturulmasından bu yana geçen süreyi kontrol edin veya son yeniden oluşturma // (başlangıç zamanı oturum değişkeni güncellendiğinde son isteğin zamanı) if (isset ($ _ SESSION ["starttime"])) (if ($ t - $ _ SESSION ["starttime"]> = $) idLifetime) (// Oturum kimliğinin süresi doldu // Yeni bir kimlik oluştur session_regenerate_id (true); $ _SESSION ["starttime"] = $ t;)) else (// Oturum yeni oluşturulduysa buraya geliriz // Ayarla geçerli zamanda oturum kimliği oluşturma zamanı $ _SESSION ["starttime"] = $ t;)) return true;)
Bu nedenle, yeni bir oturum oluştururken (kullanıcı başarıyla oturum açtığında gerçekleşir), bizim için oturum tanımlayıcısının son neslinin zamanını saklayan oturum değişkeni başlangıç zamanını mevcut sunucu zamanına eşit bir değere ayarladık. Ayrıca her istekte, tanımlayıcının son neslinden bu yana yeterli sürenin (idLifetime) geçip geçmediğini kontrol ediyoruz ve geçtiyse yeni bir tane oluşturuyoruz. Böylece, tanımlayıcının belirtilen ömrü içinde, yetkili kullanıcının çerezini alan saldırgan onu kullanmayı başaramazsa, sahte istek sunucu tarafından yetkisiz olarak kabul edilecek ve saldırgan oturum açma sayfasına yönlendirilecektir.
Not: Yeni oturum tanımlayıcısı, session_regenerate_id() işlevi çağrıldığında, session_start() işlevine benzer şekilde yeni bir çerez gönderen tarayıcı çerezine girer, bu nedenle çerezleri kendimiz güncellememiz gerekmez.
Oturumlarımızı olabildiğince güvenli hale getirmek istiyorsak, tanımlayıcının ömrünü bir olarak ayarlamak, hatta session_regenerate_id() işlevini parantezlerin dışına koymak ve tanımlayıcının yeniden oluşturulmasına yol açacak tüm kontrolleri kaldırmak yeterlidir. her istekte. (Bu yaklaşımın performans üzerindeki etkisini test etmedim ve yalnızca session_regenerate_id (true) işlevinin temelde yalnızca 4 eylemi gerçekleştirdiğini söyleyebilirim: yeni bir tanımlayıcı oluşturma, oturum tanımlama bilgisinden bir başlık oluşturma, eskisini silme ve yeni bir oturum dosyası oluşturma).
Lirik arasöz: Truva atının saldırgana çerez göndermeyecek kadar akıllı olduğu ortaya çıkarsa, ancak çerezin alınmasından hemen sonra önceden hazırlanmış bir sahte istek gönderilmesini organize ederse, yukarıda açıklanan yöntem büyük olasılıkla koruma sağlayamaz. böyle bir saldırıya karşı, çünkü Truva Atı'nın çerezi aldığı zaman ile sahte olanın gönderilmesi arasında, istekte pratikte hiçbir fark olmayacak ve bu noktada oturum kimliğinin yeniden oluşturulmama olasılığı yüksek.
Birkaç kullanıcı adına tek bir tarayıcıda aynı anda çalışabilme
Düşünmek istediğim son görev, birkaç kullanıcı için bir tarayıcıda aynı anda çalışma olasılığı. Bu özellik, özellikle kullanıcıların eşzamanlı çalışmasını taklit etmeniz gerektiğinde, test aşamasında kullanışlıdır ve bunu favori tarayıcınızda yapmanız ve mevcut cephaneliğin tamamını kullanmamanız veya tarayıcının birden fazla örneğini "gizli modda açmamanız" önerilir. " modu.Önceki örneklerimizde, oturum adını açıkça belirlemedik, bu nedenle varsayılan PHP adı (PHPSESSID) kullanıldı. Bu, şu ana kadar oluşturduğumuz tüm oturumların tarayıcıya PHPSESSID adı altında çerezler gönderdiği anlamına gelir. Açıkçası, çerezin adı her zaman aynıysa, aynı tarayıcı içinde aynı ada sahip iki oturum düzenlemenin bir yolu yoktur. Ancak her kullanıcı için farklı bir oturum adı kullansaydık sorun çözülürdü. Yani yapacağız.
fonksiyon startSession ($ isUserActivity = true, $ prefix = null) (... if (session_id ()) return true; // Parametrelerde kullanıcı öneki iletilmişse, // bunu içeren benzersiz bir oturum adı ayarlayın prefix, // aksi takdirde tüm kullanıcılar için ortak bir ad belirleyin (örneğin, BENİM PROJEM) session_name ("PROJEM". ($ önek? "_". $ önek: "")); ini_set ("session.cookie_lifetime", 0) ; if (! session_start ()) false döndürür; ...)
Şimdi geriye kalan tek şey, çağıran komut dosyasının her kullanıcı için startSession () işlevine benzersiz bir önek geçirmesini sağlamaktır. Bu, örneğin, her isteğin GET / POST parametrelerinde bir önek ileterek veya ek bir çerez aracılığıyla yapılabilir.
Çözüm
Sonuç olarak, yukarıda tartışılan tüm görevler de dahil olmak üzere PHP oturumlarıyla çalışmak için işlevlerimizin tam kodunu vereceğim.startSession ($ isUserActivity = true, $ prefix = null) ($ sessionLifetime = 300; $ idLifetime = 60; if (session_id ()) true dönerse; session_name ("MYPROJECT". ($ Önek? "_". $ Önek: "")); ini_set ("session.cookie_lifetime", 0); if (! session_start ()) return false; $ t = zaman (); if ($ sessionLifetime) (if (isset ($ _ SESSION ["lastactivity") ] ) && $ t - $ _ SESSION ["lastactivity"]> = $ sessionLifetime) (destroySession (); return false;) else (if ($ isUserActivity) $ _SESSION ["lastactivity"] = $ t;)) if ( $ idLifetime ) (if (isset ($ _ SESSION ["starttime"])) (if ($ t - $ _ SESSION ["starttime"]> = $ idLifetime) (session_regenerate_id (true); $ _SESSION ["starttime"] = $ t; )) else ($ _SESSION ["starttime"] = $ t;)) return true;) function destroySession () (if (session_id ()) (session_unset (); setcookie (session_name (), session_id ()) , zaman () -60 * 60 * 24); session_destroy ();))
Umarım bu makale, oturum mekanizmasına hiç girmemiş olanlar için biraz zaman kazandıracak ve PHP ile yeni tanışmaya başlayanlar için bu mekanizmayı yeterince anlayacaktır.
Bir kullanıcı adı ve şifreye mi ihtiyacınız var?
İnternet üzerinden makale göndermek ve gönderilen makalelerin durumunu kontrol etmek için kayıt olmanız ve hesabınızla oturum açmanız gerekir.
Gönderi İçin Makale Hazırlama Kontrol Listesi
Makale gönderme sürecinin bir parçası olarak, yazarlar makalelerinin aşağıdaki noktaların tümünü karşıladığını doğrulamalıdır ve bu gereksinimleri karşılamayan makaleler yazarlara iade edilebilir.
Makale gereksinimlere uygun olarak hazırlanmıştır.
Telif hakkı devri şartları
Yazarlar, çalışmanın telif hakkını elinde tutar ve diğerlerinin yeniden dağıtmasına izin veren bir Creative Commons Atıf Lisansı altında lisans verirken, ilk yayını eserle birlikte dergiye devreder. bu iş bu çalışmanın yazarlığının zorunlu olarak belirtilmesi ve bu dergideki orijinal yayına bir bağlantı ile.
Gizlilik bildirimi
İsimler ve adresler E-posta Bu derginin sitesine girilen bilgiler münhasıran bu derginin belirttiği amaçlar için kullanılacak olup, başka bir amaçla kullanılmayacak veya başka kişi ve kuruluşlara verilmeyecektir.
Kullanıcı, sisteme kaydolmadan önce kişisel verilerin işlenmesi ve saklanması politikasını kabul eder.
Yazar ödemeleri
1500 karakter boşluklu: 300,00 (RUB)
El yazmasının 1 sayfasının yayınlanması (1500 karakter) - 300 ruble. Grafik malzemeleri / tablolar ayrı olarak ödenir - 50 ruble / 1 adet. Yazarın Rusya içinde nakliye de dahil olmak üzere kopyası, yazarın talebi üzerine ödenir - 400 ruble. Yurtdışına transfer - 800 ruble. Yayın için materyalin kabul sertifikası göndermenin maliyeti 150 ruble.
Ekteki bilgilerin (yazarların tam adı, çalışma yeri; başlık; özet; anahtar kelimeler) tercümesi İngilizce Boşluklar dahil her karakter için 0,5 ruble.
Dikkat! elibrary.ru'ya göre 300 veya daha fazla atıf alan yazarlar (adaylar ve bilim doktorları) ücretsiz olarak yayınlanır (kendilerine yapılan atıfların payı %30'dan fazla olmamalıdır). Ücretsiz bir yayın hakkınız varsa, yorumlar alanına materyal gönderirken, alıntı sayısıyla birlikte kitaplıktaki profilinize bir bağlantı belirtin. Koleksiyonun nakliye masrafları ayrıca ödenir.