Siteler arası betik oluşturma

From mediawiki.org
Jump to navigation Jump to search
This page is a translated version of the page Cross-site scripting and the translation is 100% complete.
Other languages:
Deutsch • ‎Deutsch (Sie-Form)‎ • ‎English • ‎Türkçe • ‎dansk • ‎español • ‎français • ‎italiano • ‎русский • ‎中文 • ‎日本語
kısayol: XSS

Siteler arası betik oluşturma, XSS veya rastgele JavaScript enjeksiyonu, web uygulamalarında genellikle saldırganların enjekte etmesini sağlayan bir tür bilgisayar güvenlik açığıdır istemci tarafı betik diğer kullanıcılar tarafından görüntülenen Web sayfalardır.

İstemci tarafında siteler arası betik oluşturma ve nasıl önleneceği hakkında bilgi için DOM tabanlı XSS sayfasına bakın.

Örnekler

Siteler arası betik oluşturma örnekleri:

  • Saldırgan, kimliği doğrulanmış bir kullanıcıyı, özel hazırlanmış bir URL'yi veya denetledikleri bir web sitesini, onları hazırlanmış URL'ye yönlendirebilecek bir web sitesini ziyaret etmeye yönlendirir.
  • URL, web uygulamanızı gösterir ve sorgu dizesine JavaScript ekler. Web uygulaması, zayıf çıkış nedeniyle, rastgele JavaScript'i kullanıcıya gösterilen sayfaya enjekte eder.
  • JavaScript, kullanıcının çerezlerine tam erişim ile çalışır. Sayfayı herhangi bir şekilde değiştirebilir ve kullanıcı adına form gönderebilir. Riskler, özellikle mağdur özel ayrıcalıklara sahip bir yönetici ise şiddetlidir.

Daha fazla örnek için Vikipedi'de istismar örnekleri sayfasına bakın.

Örnek:

function getTableCell( $out, $value ) {
    $request = $out->getRequest();
    $class = $request->getVal( 'class' );
    return "<td class='$class'>" . htmlspecialchars( $value ) . '</td>';
}

Saldırgan, kurbanı aşağıdaki gibi bir URL'ye gönderir:

http://example.com/wiki/SomePage?class='%20><script>hack();</script></td><td%20class='

POST istekleri, site dışında JavaScript kullanarak da savunmasızdır.

Mağdurların etkilenecek sayfayı doğrudan ziyaret etmeleri bile gerekmez. Kötü amaçlı 3. taraf web siteleri, bir web sitesini ziyaret ederken bir kullanıcıya saldırmak için gizli iframe'leri hazırlanmış URL'lere yerleştirebilir. Ayrıca, kısa URL hizmetleri kullanarak veya URL'yi başka bir URL gibi gizleyerek kötü amaçlı veya hazırlanmış bir URL'yi ziyaret etmek için kandırılabilirler.

Siteler arası betiğini durdurma

Siteler arası betik oluşturmayı önlemek için aşağıdakileri yapın:

  • Girişinizi doğrulayın
  • Çıkışına kaçın

Doğrulamayı atlayabilirsiniz, ancak kaçmayı asla atlayamazsınız. Her şeyden kaç.

Kaçışın doğrulama ile gereksiz olup olmadığı önemli değildir, performans maliyeti, güvenli bir web uygulaması karşılığında ödenecek küçük bir fiyattır. Girişin güvenilir bir kaynaktan gelmesi önemli değildir, o zaman bile kaçmak gereklidir, çünkü kaçmak size güvenlik yanı sıra doğruluk verir.

İncelemenin kolayca yapıldığını doğrulayabilmesi için çıkışa olabildiğince yakın kaçın. Kendi kodunuzu da doğrulamanıza yardımcı olur.

Çıkış kodlaması (çıkış) bağlama duyarlıdır. Bu nedenle, amaçlanan çıkış içeriğinin farkında olun ve uygun şekilde kodlayın (ör. HTML varlığı, URL, JavaScript vb.)

OWASP Kısaltılmış XSS Önleme Hile Sayfası, XSS sorunlarını azaltmak için kullanışlı ve güncel bir hızlı başvuru kılavuzudur.

Bütün bunlar metin tabanlı değişim biçimi için geçerlidir. Web uygulamalarının çoğunu oluşturma eğilimi gösterdiği ve güvenlik sorunları özellikle ciddi olduğu için HTML üzerinde yoğunlaşıyoruz. Her metin biçiminin iyi çalışılmış bir kaçış işlevi olmalıdır.

İşte siteniz için HTML çıkışını yapan bazı kullanışlı işlevler.

Biçim Kaçış işlevi Notlar
HTML htmlspecialchars( $string, ENT_QUOTES ) Her zaman çift ve tek tırnakları dönüştüren ENT_QUOTES işaretini kullanın. PHP ne yazık ki varsayılan olarak "sadece tek tırnak kaçış" vardır.[1]
XML kimliği Sanitizer::escapeId() HTML'deki kimlik özellikleri için
Stil Sanitizer::checkCss() HTML'deki stil nitelikleri için
JavaScript FormatJson::encode(), Xml::encodeJsVar()
URL parametreleri wfArrayToCgi(), urlencode()
SQL $db->addQuotes()

MediaWiki kaçış çıkışı

MediaWiki'nin çıktınızdan dolaylı olarak kaçan zarif dahili arayüzleri de vardır. 'anahtar' => 'değer' koşullarının sözdizimini kullanan SQL için değerler örtük olarak kaçar. Ve Html:: ve Xml:: arayüz yöntemleri özniteliklerden kaçar ve kullanılan yönteme bağlı olarak bir metin değerinden de kaçabilir.

Dış bağlantılar

  • Kaçış, w3.org. Kaçmanın çok iyi yazılı tanımı.

Kaynakça