Yalnızca htmlspecialchars () çıkış çalıştırmak ya da yapmak diğer işlevler var mı?

3 Cevap php

Kullanıcı girişi çıkarılırken, sadece htmlspecialchars() kullanabilir ya da çalıştırmak fonksiyonları / eylemler / yöntemler vardır vardır musunuz? Ben de XSS ile ilgileneceğiz şey arıyorum.

Ben çıktı kullanıcı girişi kaçar ya da sadece kullanmak bir fonksiyon yazmak gerekir merak ediyorum htmlspecialchars(). Ben tek tek ele alınabilir özel durumlarda, genel durumlar için değil arıyorum.

3 Cevap

Ben genellikle kullanmak

htmlspecialchars($var, ENT_QUOTES)

giriş alanları. Ben o çok kullanmak ve kod daha kısa ve okunabilir yapar çünkü ben bunu yapan bir yöntemi yarattı.

Lets have a quick review of WHY escaping is needed in different contexts:

If you are in a quote delimited string, you need to be able to escape the quotes. If you are in xml, then you need to separate "content" from "markup" If you are in SQL, you need to separate "commands" from "data" If you are on the command line, you need to separate "commands" from "data"

Bu, genel olarak işlem gerçekten temel bir yönüdür. Verileri sınırlayan sözdizimi VERİ oluşabilir, çünkü kaçan, dolayısıyla SENTAKSI gelen DATA farklılaştırmak için bir yol olması gerekir.

In web programming, the common escaping cases are: 1. Outputting text into HTML 2. Outputting data into HTML attributes 3. Outputting HTML into HTML 4. Inserting data into Javascript 5. Inserting data into SQL 6. Inserting data into a shell command

Her biri yanlış kullanıldığı takdirde farklı bir güvenlik etkileri vardır. Bu gerçekten önemli! En PHP bağlamında bu gözden geçirelim:

  1. Text into HTML: htmlspecialchars(...)

  2. Data into HTML attributes htmlspecialchars(..., ENT_QUOTES)

  3. HTML into HTML Use a library such as HTMLPurifier to ENSURE that only valid tags are present.

  4. Data into Javascript I prefer json_encode. If you are placing it in an attribute, you still need to use #2, such as

  5. Inserting data into SQL Each driver has an escape() function of some sort. It is best. If you are running in a normal latin1 character set, addslashes(...) is suitable. Don't forget the quotes AROUND the addslashes() call:

    "'= Tablo1 SET alan1 INSERT INTO". addslashes ($ veri). "'"

  6. Data on the command line escapeshellarg() and escapeshellcmd() -- read the manual

-- Take these to heart, and you will eliminate 95%* of common web security risks! (* a guess)

Sen çıkış metni temizlik olmamalı, bu giriş üzerinde gerçekleşmesi gerekir. Ben uygulamanın tüm giriş filtreleyen bir filtre kullanın. Gerektiğinde (bir WYSIWIG editörü için söylüyor) aracılığıyla belirli etiketler / veri sağlayabilir böylece yapılandırılabilir.

Eğer hızı sağlamak böylece mümkün olduğunca çıkışı metin olarak küçük bir işlem yapmak gerekir. Işlenmesi kez daha sonra bunu 500,0000 kez işlem çok daha az gerginlik yaratır.