Önlenmesi sunucu tarafı komut dosyası, XSS

6 Cevap php

Ben sunucu tarafı kodlama ve JS enjeksiyonları önlemek için PHP / MySQL için kullanabileceğiniz önceden yapılmış komut var mı?

Böyle Htmlentities, özel karakterler gibi tipik işlevleri hakkında bilmek, dize vb yerini ancak kod basit bir bit veya her şey için bir failsafe bir işlevi var?

Herhangi bir fikir harika olurdu. Çok teşekkürler :)

EDIT:, yani tehlikeli olabilir şey dışarı şeritler genel bir şey. işaretleri daha az / daha büyük, yarı-kolonlar gibi sözler vb, "BIRAK"?

Ben temelde sadece alfanümerik olması için her şeyi sıkıştırmak istiyorum, sanırım ...?

6 Cevap

Çıkış Asla htmlspecialchars() geçti olmamıştır ve bitirdiniz HTML akışına olursa olsun herhangi bir veri bit. Basit kuralı, takip edilmesi kolay, tamamen herhangi bir XSS riskini ortadan kaldırmaktadır.

Bir programcı olarak, your iş olsa, bunu yapmak için var.

Tanımlayabilirsiniz

function h(s) { return htmlspecialchars(s); }

htmlspecialchars() PHP dosya başına 100 kez yazmak için çok uzun ise. Öte yandan, kullanılarak htmlentities() hiç gerekli değildir.


Anahtar nokta: kod vardır, ve veri yoktur. Eğer ikisini birbirine karıştırmak ise, kötü şeyler doğmak.

HTML durumunda, kod adları, varlıkları, yorum niteliği, unsurlar. Veri her şey. Veri must kodu için yanlış önlemek için öncelenmesi.

URL'lerin durumunda, kod düzeni, ana bilgisayar adı, yol, sorgu dizesi mekanizması (?, &, =, {[olduğunu (3)]}). Parametre adları ve değerleri: Veri sorgu dizesinde her şeydir. Onlar must kodu için yanlış önlemek için öncelenmesi.

HTML gömülü URL'ler must iki kat ile (URL-kaçan and HTML-kaçan) öncelenmesi kod ve veri düzgün ayrılmasını sağlamak.

Modern tarayıcılar yararlı bir şeye inanılmaz kırık ve yanlış biçimlendirme ayrıştırma yeteneğine sahiptir. Bu özellik de, stresli olmamalıdır. Şey çalışmak olur ki aslında bunu yapmak için iyi ya da doğru olduğu anlamına gelmez (olmadan <a href> URL'ler gibi HTML-kaçan uygulanan uygun). XSS bir sorun olduğunu kökleri a) veri / kod (yani) "kaçan" ayrılık ya da özensiz olanlar ve habersiz insanlar b) kaçmaya gerek yok hangi veri parçası konusunda zeki olmaya çalışan insanlar.

Eğer kategoriler a) ayrılır ve b) yok emin olun eğer XSS önlemek için yeterince kolaydır.

I Google-caja belki bir çözüm düşünüyorum. Ben otomatik olarak XSS algılamak ve engellemek için java web uygulaması için bir kusur analizörü yazmak. Ama PHP için. Ben web geliştirici için kötü değil Caja kullanarak Öğrenme düşünüyorum.

Hayır, yok. Riskler veri ile ne bağlıdır, (Eğer verilerin çoğu atmak istediğiniz sürece) her şey için veri güvenli kılan bir şey yazamıyorum

kod basit bir bit veya her şey için bir failsafe bir işlevi var?

Hayır.

PHP çıkan veri gösterimi nereye gittiğini özellikle göre kodlanmış / dönüştürülmesi gerekir. Ve bu yüzden sadece bu PHP yaprak noktasında kodlanmış / dönüştürülmesi gerekir.

C.

XSS saldırıları daha anlamak için OWASP başvurabilirsiniz:

https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

Js saldırıları önlemek için, açık kaynak mükemmellik tarafından sağlanan bu projeyi deneyebilirsiniz:

https://www.opensource-excellence.com/shop/ose-security-suite.html

web siteme önce js saldırıları vardı, ve bu aracı bana gündelik tüm saldırıları engellemek yardımcı olur. i sorunu önlemek için size adamlar yardımcı olabilir düşünüyorum.

Ayrıca, tüm js saldırıları filtrelemek için php script bir filtre ekleyebilirsiniz, burada işi yapabileceği bir desen:

if (preg_match('/(?:[".]script\s*()|(?:\$\$?\s*(\s*[\w"])|(?:/[\w\s]+/.)|(?:=\s*/\w+/\s*.)|(?:(?:this|window|top|parent|frames|self|content)[\s*[(,"]\s[\w\$])|(?:,\s*new\s+\w+\s*[,;)/ms', strtolower($POST['VARIABLENAME']))) { filter_variable($POST['VARIABLENAME']); }

To answer to your edition: everything except <> symbols has nothing to do with XSS.
And htmlspecialchars() can deal with them.

Sayfanın metninde kelime DROP table hiçbir zararı yoktur ;)