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:
Text into HTML:
htmlspecialchars(...)
Data into HTML attributes
htmlspecialchars(..., ENT_QUOTES)
HTML into HTML
Use a library such as HTMLPurifier to ENSURE that only valid tags are present.
Data into Javascript
I prefer json_encode
. If you are placing it in an attribute, you still need to use #2, such as
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. *mysql_real_escape_string() is better.* Don't forget the quotes AROUND the addslashes() call:
"'= Tablo1 SET alan1 INSERT INTO". addslashes ($ veri). "'"
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)