Html ve giriş alanlarında hem de güvenli bir şekilde çıkışını kaçan

0 Cevap php

Benim web uygulaması, kullanıcılar giriş metin veri. Bu veriler, diğer kullanıcılara gösterilen olabilir ve orijinal yazar da geri dönüp kendi verilerini düzenleyebilirsiniz. Ben güvenle bu verileri kaçmak için doğru bir yol arıyorum.

Ben sadece sql de yolda sterilize ediyorum, bu yüzden okur gibi her şey saklanır. Diyelim ki veritabanında "déjà vu" var diyelim. Ya da, bir <script> etiketi, daha aşırı olmak. Bu, geçerli ve hatta kötü niyetli değildir, girdi olabilir mümkündür.

Eminim her şey kaçtı yapmak için dışarı giderken htmlentities() kullanıyorum. Sorun html ve giriş alanları farklı şeyler tedavi olmasıdır. Ben yazarın metnini düzenlerken, onlar giriş alanlarında yazdığınız tam olarak ne gördüğü o HTML güvenli olduğundan emin olmak istiyorum, ama. Ben de dinamik verilerle form alanları doldurmak için jQuery kullanıyorum.

Eğer bunu yaparsam:

 <p><?=htmlentities("déjà vu");?></p>
 <input type=text value="<?=htmlentities("déjà vu");?>">

d&eacute;j&agrave; vu her iki yerde de sayfa kaynak koyar (Ben backtick zorunda ya da "deja vu" görürdünüz!) Sorunu <p> olarak çıktı doğru olduğunu ama giriş sadece kaçtı metni gösterir. Kullanıcı formu yeniden gönderir, onlar kaçış çift ve onların giriş berbat.

Ben aksi takdirde değeri teklifi bitirmek ve kötü şeyler yapabilirsiniz, ben hala alana gider metni sterilize etmek zorunda biliyorum. Ben buldum tek çözüm budur. Yine, jQuery kullanıyorum.

var temp = $("<div></div>").html("<?=htmlentities("déjà vu");?>");
$("input").val(temp.html());

Bu kodlanmış karakterler olarak kaçtı metni okumak div neden olur, ve daha sonra jquery kopyalar giriş etiketi için bu kodlanmış karakterler, düzgün korunmuş olarak bu işleri.

Yani benim soru: bu hala güvenli, ya da bir yere bir güvenlik açığı var mı? Ve daha da önemlisi, bu bunu yapmak için tek / doğru yolu nedir? Ben çözmek için bu önemsiz bir konu yapmak nasıl html ve karakter kodlama çalışmaları hakkında bir şey eksik?

EDIT

Bu aslında yanlış, ben bu çalışma değil noktaya benim örnek basitleştirilmiş. Ben alana metin eklemek için jQuery en val () kullanıyorum çünkü sorun aslında.

<input>
<script>$("input").val("<?=htmlentities("déjà vu");?>");</script>

Bunun nedeni, şekli dinamik olmasıdır - kullanıcı eklemek veya irade alanları kaldırmak ve böylece sayfa yük sonra oluşturulur olabilir.

Bu yüzden jQuery girişine gitmek için veri kaçan gibi görünüyor, ama yeterince iyi değil - şeyimi kendim yapmazsam, bir kullanıcı hala benim kod öldürme, bir </script> etiketi koyabilirsiniz ve kötü niyetli kod ekleyerek. Ama burada yapılacak başka bir argüman var. Sadece orijinal yazar zaten bir giriş kutusuna metni görebilirsiniz beri, ben bile rahatsız gerekir? Temelde onlar karşı bir XSS saldırısı yürütebilir sadece insanların kendileridir.

0 Cevap