2010-11-15 22 views
21

İstemci/kullanıcı/bilgisayar korsanının kendilerini $_SESSION değişkenlerini ayarlayabileceği herhangi bir senaryo var mı (sunucu bilgisayarda çalışan kötü amaçlı yazılımlar hariç).

Bunu sormamın sebebi çünkü birkaç gün önce sordu this question taşımaktadır. O zamandan beri konuyla ilgili kafaları karışmış durumdayım, ama daha iyi bir seans fiksasyonu ve kaçırma fikrine sahibim. Ben isset($_SESSION['validated']) gibi bir şeyle her sayfayı doğrulamak eğer

, mümkün olduğunca basit söylemek gerekirse, bu güvenli?

cevap

18

Evet filtresiz kullanıcı girişi doğrudan $_SESSION değişkenleri atama olsaydı. Benim noktasına getiriyor

: kullanıcıdan girdi asla güvenme. Eğer giriş süzme vardır aslında Eğer HİÇ

, o zaman ben bunun nasıl yapılacağının görmüyorum.

+10

, (web programcısı adına duyarlılık varsayarak) yapamadı. $ _SESSION için veriler sunucunun kendisinde tutulur ve çerez olarak saklanan bir anahtar tarafından araştırılır. "$ _SESSION" daki veriye gerçekte izin vermenin bir yolu yoktur, ancak bir kullanıcı başka bir oturumun oturum kimliğini tahmin edebilir ve uygun oturum çerezini gönderebilir. Ama tüm niyet ve amaçlar için, size (web programcısı), diğer kullanıcıyla tam olarak aynı olurdu, bu yüzden onlara karşı korunmak sizin sorumluluğunuzda değil. Firesheep (http://codebutler.github.com/firesheep/) bunu yapar. – Ashe

+0

@Arlen - Düzenlememe bir göz attıysanız, sorduğum diğer soruda tam olarak aradığım cevap bu. Bazı repçiler orada kapmak için. – Ben

+0

Ve eğer RSA özel anahtarınıza insan verirseniz, o zaman RSA şifreleme bozuk ... –

-1

Evet, mümkün. Session poisoning ve Wikipedia ya da Google'da bir diğer oldukça yaygın güvenlik sorunu olan Session fixation'u okuyun - web bu konuyla ilgili makalelerle doludur. kullanıcı sunucu erişimi yoksa

+0

Uhhh ... bu makalede "saldırgan ve mağdurun bir web otelini paylaşması durumunda mümkün olan" ve "aynı oturum durumlarından habersiz" ifadeleri var ama Kullanımın farklı olduğu, belirsizlik ve ırk koşullarına neden olduğu ".Ama ben senin dikkatini ve etrafına bakacağım. – Ben

+4

Oturum zehirlenmesinin burada alakalı olduğundan emin değilsiniz. Bunlar, dengesiz kullanıcı girdisini kullanarak oturum değişkenleri atamakla ilgili olan dilden bağımsız kodlama problemleridir. Mesele şu ki, müşterilerin $ _SESSION'a doğrudan erişmelerine imkân yok. Uygulamanız onlar için yapmalı. Buna izin verilip verilmeyeceği ayrı bir sorun. Doğrudan kullanabileceğiniz manipülasyondan emin olmak için $ _SESSION'a güvenebilirsiniz, tıpkı web root'unuzun dışındaki dosyaların, kullanıcılar tarafından doğrudan erişilemeyeceğinden emin olabilirsiniz. –

1

başka türlü hayır onlar bunu değiştirmek ancak edemez $ _SESSION değişkenleri değiştirilebilir sanmıyorum değişkenleri filtreleme veya kullanıcının girdiği bir şeydir eğer tavsiye edilir sterilize.

+1

Soruları yanıtlarken özellikle OP'nin sorusu özel kullanıcı verileriyle ilgili olabileceği için muhtemelen tahmin etmemelisiniz. – vqdave

0

Soruyu tam olarak anlayamıyorum, ama bu soru benim yapmak istediğimi düşündüğüm yolumu açıklıyor.

jQuery'yi eklediğinizden emin olun.

Kodu:

<html> 
<head> 
    <title>Tab name</title> 
    <meta charset = "UTF-8" /> 
    <script type = "text/javascript" src = "http://code.jquery.com/jquery-1.1.13.min.js"></script> 
    <script type = "text/javascript" src = "script.js"></script> 
</head> 
<body> 
</body> 

</html> 

Sonra addsession.php adlı bir dosya yapmak. addsession.php için

Kodu: script.js için

<?php session_start(); ?> 
<?php 
    if(isset($_POST["name"])){ 
    $name = $_POST["name"]; 
    } else { 
    print '<p style = "color: red; font-weight: bold;">Name not defined!</p>' . "\n"; 
    $name = "unknownsessionvariable"; 
    } 
    if(isset($_POST["value"])){ 
    $value = $_POST["value"]; 
    } else { 
    $value = ""; 
    } 
    $_SESSION[name] = value; 
?> 

Kodu:

function session(name, value){ 
    $.post(addsession.php, {"name" : name, "value" : value}); 
    window.location.reload(); // This line maybe should be here depending on what you are doing. 
} 
$(document).ready(function(){ 
    session("sessvar", "supervalue"); 
}); 

örnek kod parçacığı: Gerçekten de

function session(name, value){ 
 
    $.post("http://www.eastonwerling.com/addsession.php", {"name" : name, "value" : value}); 
 
    //window.location.reload(); 
 
$(document).ready(function(){ 
 
    session("sessvar", "supervalue"); 
 
});
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> 
 
<p>This example depends on www.eastonwerling.com (my website).</p>

İlgili konular