JavaScript komut dosyası PHP ile veritabanında eklenen rescrict nasıl?

8 Cevap php

PHP veri ekleme ile ilgili bir problem var.

Sitemde bir mesaj sistemi var.

Yani ne benim gelen yükler o bir JavaScript uyarısı verir.

Siteme bir çok arandı ve nihayet birisi bana aşağıdaki metin ile bir mesaj göndermek olduğunu bulundu.

<script>
  alert(5)
</script>

Peki nasıl komut dosyası kod benim veritabanında eklenen kısıtlayabilirsiniz?

PHP üzerinde çalıştırıyorum.

8 Cevap

Kullanmak strip_tags . If you still want to allow some HTML, then add a whitelist in the second parameter. olmalıdır

Ben bir really big caveat buraya eklemek gerekir. Bir strip_tags Beyaz liste herhangi bir etiket bırakarak ediyorsanız, yine javascript enjeksiyon duyarlı olabilir. Eğer görünüşte zararsız etiketleri <strong> ve <em> izin konum varsayalım:

Strip tags will still allow all attributes, including event handlers
like <strong onmouseover="window.href=http://mydodgysite.com">this</strong>.

Ciddi birkaç seçeneğiniz var:

  • strip_tags hiçbir beyaz liste ile. Güvenli, ancak herhangi bir biçimlendirme için izin vermez, ve bu gibi dizeleri ile sorunlara neden olabilir: "x<y, but y>4" --> "x4"
  • htmlentities. (Eğer veritabanında koymadan önce veri değil) Ekrandaki verileri görüntülerken bu kullanın. Bu güvenli, ancak biçimlendirme için izin vermez.
  • Örneğin HTML daha farklı bir biçimlendirme sistemi: Markdown, Wiki markup, BB Code. HTML geri dönüştürmek için render gerektirir, ama çoğunlukla güvenli ve oldukça esnek olabilir.

JavaScript kodu veritabanında saklanan olması ile hiçbir sorun yoktur. Gerçek sorunu olmayan HTML içeriği veritabanından alınan ve HTML sanki kullanıcıya görüntülenen ile. Doğru yaklaşım oluşturma kodu değil HTML olarak, metni olarak davranır emin olacaktır.

PHP, bu gelen kutusunu görüntülerken gelen içeriğine htmlspecialchars çağrı (muhtemelen nl2br ile birlikte ve belki <a> etiketleri bağlantılar dönerek) tarafından yapılabilir olacaktır.

striptags metin içerik için kullanmaktan kaçının: Bir kullanıcı olarak, ben böyle bir mesaj yazmak isteyebilirsiniz:

... and to create a link, use <a href="your-url-here">your-text-here</a> ...

striptags, etiketi ortadan kaldıracak htmlspecialchars o yazdığınız gibi metin görünür kılacak.

Sen (StackOverflow kısıtlamak olsaydı, biz burada kod örnekleri göndermek mümkün olmaz!) Bu veritabanına eklenecek kısıtlamak olmamalı

Sen daha iyi görüntülemek nasıl kontrol etmelidir. Örneğin, echo çağrısına htmlentities() veya htmlspecialchars() ekleyin.

Kullanıcı girişi onu çıktısını almadan kaçtı edilmelidir.

Bir şey sunulan bir kullanıcı görüntülediğiniz zaman, htmlspecialchars() önce onu koşuyoruz. Bu güvenli çıkış içine HTML kodunu çevirmek gerekir.

htmlspecialchars() fonksiyonuna bir göz atın. Bu dönüştürür < > '"Ve & kendi html varlık equilivents için, <script> olacak anlamına &lt;script&gt;

Ben doğru anlamak, sadece iki basit komutlar arıyoruz:

$message = str_replace($message, "<", "&lt;");
$message = str_replace($message, ">", "&gt;");