HTML Injection
HTML Injection

Front-end güvenliğinin bir diğer büyük kısmı, kabul edilen kullanıcı girdisini doğrulamak (validate) ve temizlemektir (sanitize). Çoğu durumda kullanıcı girdisinin doğrulanması ve temizlenmesi back-end tarafında yapılır. Ancak bazı durumlarda kullanıcı girdisi hiç back-end’e ulaşmaz ve tamamen front-end üzerinde işlenip ekrana basılır (render edilir). Bu yüzden kullanıcı girdisini hem front-end hem de back-end tarafında doğrulamak ve temizlemek kritik derecede önemlidir.
HTML injection, filtrelenmemiş kullanıcı girdisinin sayfada gösterilmesi durumunda ortaya çıkar. Bu, daha önce gönderilmiş bir kodun geri çağrılmasıyla olabilir (örneğin back-end veritabanından bir kullanıcı yorumunun çekilmesi gibi) ya da JavaScript kullanılarak front-end üzerinde filtrelenmemiş girdinin doğrudan ekrana basılmasıyla olabilir.
Bir kullanıcı, girdisinin sayfada nasıl görüntüleneceği üzerinde tamamen kontrol sahibi olduğunda HTML kodu gönderebilir ve tarayıcı bunu sayfanın bir parçası gibi gösterebilir. Bu kodlar kötü amaçlı HTML içerebilir; örneğin harici bir login formu. Bu tür bir form, kullanıcıları kandırarak giriş yaptırabilir ve aslında kullanıcı adı/şifrelerini kötü amaçlı bir sunucuya gönderip daha sonraki saldırılarda kullanmak üzere toplayabilir.
HTML Injection’a bir diğer örnek de web sayfası “defacing” (sayfa tahrifatı) saldırılarıdır. Bu saldırılar; sayfanın görünümünü değiştirmek için yeni HTML kodu enjekte etmeyi, kötü amaçlı reklamlar eklemeyi veya sayfayı tamamen değiştirmeyi içerir. Bu tür saldırılar, web uygulamasını barındıran şirket için ciddi itibar kaybına yol açabilir.
Örnek
Aşağıdaki örnek, “Click to enter your name” (Adını girmek için tıkla) adlı tek bir butonu olan çok basit bir web sayfasıdır. Butona tıklayınca bizden ismimizi girmemizi ister ve ardından ismimizi “Your name is …” (Adın …) şeklinde ekranda gösterir.

Eğer herhangi bir input sanitization yoksa, bu sayfa HTML Injection ve Cross-Site Scripting (XSS) saldırıları için çok kolay bir hedef olabilir. Sayfanın kaynak koduna baktığımızda, hiçbir girdi temizleme işlemi olmadığını görürüz; çünkü sayfa kullanıcıdan aldığı girdiyi direkt ekrana basmaktadır:
<!DOCTYPE html>
<html><body>
<button onclick="inputFunction()">Click to enter your name</button>
<p id="output"></p><script>
function inputFunction() {
var input = prompt("Please enter your name", "");if (input != null) {
document.getElementById("output").innerHTML = "Your name is " + input;
}
}
</script>
</body></html>HTML Injection test etmek için, ismimiz yerine küçük bir HTML kod parçası girebiliriz ve bunun sayfanın bir parçası gibi gösterilip gösterilmediğine bakarız. Aşağıdaki kodu test edeceğiz; bu kod web sayfasının arka plan görselini değiştirir:
<style> body { background-image: url('https://academy.hackthebox.com/images/logo.svg'); } </style>Bunu girdikten sonra, web sayfasının arka planının anında değiştiğini görürüz.
Bu örnekte her şey front-end üzerinde yapıldığı için, sayfayı yenilemek (refresh) her şeyi sıfırlar ve sayfa normal haline döner.







