Merhaba Ben Rapx13 buda 0'dan XSS öğrendiğim serinin 4. günü bu seriyi okuyup takip eden varsa teşekkürler şimdiden
Bugün Şu konuları ele alıcağım.
Adım-4: Stored(depolanmış) XSS'i derinlemesine öğreniyoruz.
Stored (Depolanmış) XSS bir formun web forumu gönderilerinde, ürün incelemelerinde, kullanıcı yorumlarında ve diğer veri depolarında meydana gelebilmekte.
Depolanmış XSS veya Kalıcı XSS olarakta geçer, uygulama kullanıcı tarafından sağlanan girdileri depoladığında ve daha sonra uygun temizleme veya kaçış olmadan diğer kullanıcılara sunulan web sayfalarına gömdüğünde ortaya çıkan bir web uygulaması güvenlik açığıdır.
bu dediğimi kodları yorumluyunca anlıyıcaksınız çok basit.
önden anlatmam gerekirse, siz bir arama kısmına hebele hübele yazdınız diyelim koddada sizin bu yazdığınız otomatik olarak veri tabanına kaydedilirse ve oraya normal yorum yerine zararlı kod yazarsak ne olucak artık veri tabanına kod enjekte etmiş olucağız buda istenmeyen bir durum.
hemen dillere geçiyorum.
PHP:
Kullanıcıdan gelen bir yorumu okuyun ve değişkene kaydeder.$comment
Veritabanındaki tablodaki sütuna ekler. $commentcommentcomment
Daha sonra, sütundaki tüm satırları yineler ve ekranda görüntüler. comment
$comment = $_POST['comment'];
mysqli_query($conn, "INSERT INTO comments (comment) VALUES ('$comment')");
// Displaying user comment
$result = mysqli_query($conn, "SELECT comment FROM comments");
while ($row = mysqli_fetch_assoc($result)) {
echo $row['comment'];
}
anlıyıcağınız üzere burda zararlı kodu engelliyicek ne özel karakter koruması nede bi önlem var o yüzden sütunlara kod enjekte etmek çok basit
kodu düzenlersek:
// Storing user comment
$comment = mysqli_real_escape_string($conn, $_POST['comment']);
mysqli_query($conn, "INSERT INTO comments (comment) VALUES ('$comment')");
// Displaying user comment
$result = mysqli_query($conn, "SELECT comment FROM comments");
while ($row = mysqli_fetch_assoc($result)) {
$sanitizedComment = htmlspecialchars($row['comment']);
echo $sanitizedComment;
}
Ekrandaki her yorumu görüntülemeden önce, tüm özel karakterlerin HTML varlıklarına dönüştürüldüğünden emin olmak için işlevden geçiririz. Sonuç olarak, depolanan XSS için yapılan girişimler son kullanıcının tarayıcısına ulaşmaz. htmlspecialchars()
Bu, bu odanın kapsamı dışındadır; ancak, SQL ekleme güvenlik açığını merak ediyorsanız, bu, . Bu işlev, bir SQL deyiminde güvenle kullanılabilmesi için giriş dizesindeki özel karakterlerden kaçar. mysqli_real_escape_string()
SQL işiyile uğraşan arkadaşlar bilirki sitede açık yoksa ve özel karakterlere izin vermiyorsa tırnak attığınızda %27 yazar işte bu bi üstteki kodun sayesinde.
Java Script (Node.js):
Aşağıdaki kodda comments parametresi alınan bilgiyi htmle kaydediyor yani veri tabanı gibi düşünün ayrıca kullanıcıya yorumu html olarak gösterdiği için enjekte edilen kod adamın ekranına çıkıyor sorun bu.
app.get('/comments', (req, res) => { //kodu aldıBu, bu odanın kapsamı dışındadır; ancak, SQL ekleme güvenlik açığını merak ediyorsanız, bu, . Bu işlev, bir SQL deyiminde güvenle kullanılabilmesi için giriş dizesindeki özel karakterlerden kaçar. mysqli_real_escape_string()
SQL işiyile uğraşan arkadaşlar bilirki sitede açık yoksa ve özel karakterlere izin vermiyorsa tırnak attığınızda %27 yazar işte bu bi üstteki kodun sayesinde.
Java Script (Node.js):
Aşağıdaki kodda comments parametresi alınan bilgiyi htmle kaydediyor yani veri tabanı gibi düşünün ayrıca kullanıcıya yorumu html olarak gösterdiği için enjekte edilen kod adamın ekranına çıkıyor sorun bu.
let html = '<ul>'; //html'e iletti
for (const comment of comments) {
html += `<li>${comment}</li>`;
}
html += '</ul>';
res.send(html); //gönderi kısmınıda html olarak gösterdi
});
Bu sorunun çözümü ise sanitizeHTML() parametresini kullanmak bunun amacı yorumu göstermeden önce html'i temizlemesidir kolay bir çözüm
KOD:
KOD:
| const sanitizeHtml = require('sanitize-html'); app.get('/comments', (req, res) => { let html = '<ul>'; for (const comment of comments) { const sanitizedComment = sanitizeHtml(comment); html += `<li>${sanitizedComment}</li>`; } html += '</ul>'; res.send(html); }); |
C# ASP.NET:
Aşağıdaki C# kodunda birden çok güvenlik açığı var.
| public void SaveComment(string userComment) { var command = new SqlCommand("INSERT INTO Comments (Comment) VALUES ('" + userComment + "')", connection); // Execute the command } public void DisplayComments() { var reader = new SqlCommand("SELECT Comment FROM Comments", connection).ExecuteReader(); while (reader.Read()) { Response.Write(reader["Comment"].ToString()); } // Execute the command } |
ben 2 açık buldum bi sql var bir de xss zaten onun olduğu belli 
kodu düzeltelim.
KOD:
kodu düzeltelim.
KOD:
| using System.Web; public void SaveComment(string userComment) { var command = new SqlCommand("INSERT INTO Comments (Comment) VALUES (@CommenT)", connection); command.Parameters.AddWithValue("@CommenT", userComment); } public void DisplayComments() { var reader = new SqlCommand("SELECT Comment FROM Comments", connection).ExecuteReader(); while (reader.Read()) { var comment = reader["Comment"].ToString(); var sanitizedComment = HttpUtility.HtmlEncode(comment); Response.Write(sanitizedComment); } reader.Close(); } |
Kodumuzu düzeltemeye yarıyan parametre: HttpUtility.HtmlEncode()
1. soru : Kullanıcı girişini kaydetmeden önce sterilize etmek için kullandığımız JavaScript işlevinin adı nedir?
2. soru : Kullanıcı girişini temizlemek için C# ASP.Net hangi yöntemi çağırdık?
cevaplar aşşağıda
az çok okuduysanız zaten teker teker parametreleri verdim bilerek kolay (zaten zor değilde
) çözülsün diye
Bu konuluk bu kadardı umarım bir şeyler katabilmişimdir olabildiğince basit anlatmaya çalıştım.
İyi Forumlar Dilerim.
GÜN 5
1. soru : Kullanıcı girişini kaydetmeden önce sterilize etmek için kullandığımız JavaScript işlevinin adı nedir?
2. soru : Kullanıcı girişini temizlemek için C# ASP.Net hangi yöntemi çağırdık?
cevaplar aşşağıda
az çok okuduysanız zaten teker teker parametreleri verdim bilerek kolay (zaten zor değilde
Bu konuluk bu kadardı umarım bir şeyler katabilmişimdir olabildiğince basit anlatmaya çalıştım.
İyi Forumlar Dilerim.
GÜN 5
Son düzenleme:
