başlıkları olmadan bir web sayfası güvence

7 Cevap php

Ben sadece bunu okuyun article on tdwtf.com. Bu başlıkları görmezden çünkü genellikle bir şeyleri yok, bir arşivleme bot açıklar. Ben o başlıkları olmadan bir sayfa güvenliği nasıl bilmiyorum fark etti. Bu nedenle benim soru:

What security measures can i take besides using headers?

Ben php çok geliştirmek, böylece ("Konum:") başlığı ile aşina değilim fonksiyonu. Ama başka ne var?

İdeal mantığı ile değiştirin arıyorum

if (!$something_important) header("Location: somehereharmless.php");

(daha fazla) başka bir şey ile güvenli?

7 Cevap

header: location is fine, as long as you include an exit at the end. You might also want to include a link or something.

Ben genellikle bu gibi bir şey kullanabilirsiniz:

<?php
function redirect($url)
{
    header('Location: ' . $url);
    exit('<a href="' . $url . '">Redirecting you to: ' . $url . '</a>');
}

redirect('somepage.php');
?>

Bu şekilde insanların yönlendirme atlamak ve onlar yönlendirilmesi gerektiğini bilemez.


[Düzenle]

Şeyler silerken Ayrıca, always POST kullanın. Bu bir sahte oluşturmak çok kolaydır GET (örneğin <img src="http://www.example.org/action.php?do=SetAsAdmin&userid=MyUserId" />).

Bu oldukça iyi çalışıyor

if (!$something_important) {
  header("Location: somehereharmless.php");
  exit();
}

Bu bot, bu yüzden Yer saygı duymuyor bile, yürütme akışı yine durdu böylece bir çıkış aramak, böylece hiçbir zarar edecek

Emin olun sizin alır bütün İdempotent vardır

İdempotent aynı isteğinde defalarca yaptığını bir kez yapıyor gibi aynı etkiye sahip olduğu anlamına gelir.

Ben derdim ki sen must çok sağ orada açmış olduğu için kontrol koymak, sadece, diyelim ki, oturum açmış kullanıcıların gerçekleştirmek mümkün olmalıdır bazı eylem gerçekleştiren bir PHP komut dosyası varsa Aynı senaryo, böylece bir bakışta bakmak ve kodu güvenli olduğunu görebilirsiniz. Benim kural sadece iki geçerli desenler güvenli kodu korumak için var olmasıdır:

if (user_is_authorized()) {
    // restricted code here
}

veya Alekc en

if (!user_is_authorized()) {
    // send headers or whatever if you want
    exit();
}
// restricted code here

Ben o makaleyi okurken Dürüst olmak gerekirse, ben ... doğrusu şok ... ya da en azından hayal kırıklığına uğradım - Birisi bir web sitesi HTTP başlıkları ile güvence olabilir sonucuna vardım nasıl anlayamıyorum. Bir başlık sunucu gönderir bazı metin başka bir şey değildir. Bu (en azından, bu konuda güvenlik amacıyla bu şekilde düşünmek zorunda) takip veya irade istemci tarafından göz ardı edilebilir bir talimat var. Bildiğim kadarıyla bana kalırsa, giden (tepki) HTTP başlıklarını oldukça fazla işe yaramaz güvenlik için vardır. (Bu, bir başlık göndermek ve yanıt olarak bir geri almak HTTP kimlik, gibi şeyler saymıyor ... ama bu durumda bu size güvenlik temel o cevap başlığının içeriği var, değil dışarı gönderdi başlığı.)

Eğer sağlanan bağlantıyı bildirilen olayın nedeni header(); sonra eksik exit; beyanı oldu. Komut durursa bot herhangi bir zarar yapamaz. -

Sizin çözüm

<?php
die($errormessage);

Sadece başlangıç ​​geçmesi, sizin komut değil, durdurmak ölecek, herhangi bir veri toplamak yok olmamalıdır.

Alekc cevabı için eklenmesi. Tablolar ve kişinin hepsini için nitelendirir: birçok header ("Location") varsa. Son patlayacaktır.

if($foo && $bar)
{
    header("Location: somehereharmless.php");
}

if($foo && $baz)
{
    header("Location: someotherplace.php");
}

Bu kullanıcı 3 değişkenleri belirledi Yani, o someotherplace.php yönlendirildi alacak. Eğer bir çıkış yoksa (); ya da bir kalıp (); başlığının ();