İçeriğe atla

Kaçış dizileri

Neredeyse her kaçış hatası, söz dizimi hatası değil bağlam hatasıdır. Karakter bilinir — bir tırnak, bir ters eğik çizgi, bir ampersand — ve belirsiz olan şey, dizenin nereye inmek üzere olduğu yerde hangi altı kuraldan hangisinin uygulanacağıdır.

Yani bu tablo karaktere göre değil bağlama göre organize edilmiştir. Aynı tırnak bir CSV hücresinde iki katına çıkarılır, JSON'da ters eğik çizgiyle kaçırılır, HTML'de " olur ve bir kabuğun tek tırnak içinde tamamen yalnız bırakılır. Dört satır, dört kural, bir karakter.

En önemli kural, insanların en son ulaştığı kuraldır: değerin geçtiği sınırda kaçışlayın ve onu bir kez kaçışlayın. İki kez kaçırılan metin — sayfa kaynağında bir &, çıkış dosyasında bir \\n — değerin iki kodlayıcıdan geçtiğinin imzası olup, her biri ilk olduğunu varsaydı.

JSON dizeleri

10

JSON tam olarak bu kaçışları sağlar. Bir dize içinde gerçek bir satır sonu veya sekme geçersizdir.

KaçışAnlamNe zaman ihtiyacınız varBağlamda
\""Bir dize içinde çift tırnak"say \"hi\""
\\\Gerçek bir ters eğik çizgiWindows yollarının JSON'da neden kırılması nedenidir."C:\\dir"
\//Eğik çizgi — isteğe bağlıYasal ama gereksiz; <script> etiketlerine JSON gömmekten bir alışkanlık."a\/b"
\nU+000ABir beslenme hattı"line\nline"
\rU+000DBir taşıt dönüşü
\tU+0009Bir sekme
\bU+0008Geri boşluk
\fU+000CBir form beslemesi
\u00e9éHerhangi bir karakter kod noktasına göre"caf\u00e9"
\ud83d\ude00😀U+FFFF'nin üstündeki karakter, vekil çifti olarakJSON hiçbir \u{…} formuna sahip değil, bu nedenle astral karakterler iki kaçış alır.

JavaScript dizeleri

10

JSON'un bir üst kümesi, artı şablon-literal kaçışları.

KaçışAnlamNe zaman ihtiyacınız varBağlamda
\''Tek tırnaklanmış bir dize içinde tek tırnak
\""Çift tırnaklı bir dize içinde çift tırnak
\``Şablon değişmezinde arka tırnak
\${${Şablon değişmezi içinde gerçek ${Ters eğik çizgi olmadan bir interpolasyon başlar.
\nU+000ABir beslenme hattı
\xe9éIki hex rakamı ile bir karakter, U+00FF'ye kadar
\u00e9éDört hex rakamı ile bir karakter
\u{1f600}😀Herhangi bir kod noktası, ne kadar uzun olursa olsunDört haneli formdan farklı olarak vekil çiftine ihtiyaç duymaz.
\0U+0000Null karakter
\u2028U+2028Satır ayırıcısıJS dizesinde geçerli ancak JSON'da değil — klasik bir JSONP kırılması.

HTML metin ve öznitelikleri

8

Metinde sadece & ve < kesinlikle kaçış yapılmalıdır; tırnaklar özniteliklerde önemli olup.

KaçışAnlamNe zaman ihtiyacınız varBağlamda
&amp;&Bir ampersandBunu ilk kaçışlayın, aksi takdirde diğer her kaçış iki katına çıkar.
&lt;<Bir küçüktür işareti, böylece etiket başlamaz
&gt;>Daha büyük bir işaret
&quot;"Öznitelik içinde çift tırnak
&#39;'Öznitelik içinde tek tırnak&apos; HTML5'te de çalışır, ancak sayısal form her yerde güvenlidir.
&nbsp;U+00A0Bölünmez boşluk
&#233;éHerhangi bir karakter ondalık kod noktasına göre
&#xE9;éHerhangi bir karakter hex kod noktasına göre

URL'ler (yüzde kodlama)

9

Hangi karakterlerin kaçış yapılması gerektiği URL'nin içindeki kısma bağlıdır.

KaçışAnlamNe zaman ihtiyacınız varBağlamda
%20 Bir URL'de geçerli boşluk
+ Boşluk, ancak sadece form-kodlanmış bir sorgu dizesi içindeBir yol segmentinde bu gerçek bir artı işaretidir.
%25%Gerçek bir yüzde işaretiBunu kaçırmayın ve değer iki kez kodu çöz.
%2F/Tek bir yol segmenti içinde eğik çizgi
%3F?Bir değerde soru işareti
%26&Bir parametre değerinde ampersand
%3D=Bir parametre değerinde eşit işareti
%23#Bir karmaca, böylece parça başlamaz
%C3%A9éBir ASCII olmayan karakter, UTF-8 baytları olarakBir karakter iki, üç veya dört yüzde grubuna olabilir.

CSV alanları

5

RFC 4180: alanı tırnak işaretleriyle sarın, sonra içindeki herhangi bir tırnak işaretini iki katına çıkarın. Ters eğik çizgiler hiçbir şey ifade etmez.

KaçışAnlamNe zaman ihtiyacınız varBağlamda
"""Tırnak işaretli bir alan içinde tırnak işareti — iki katına çıkarın"say ""hi"""
"a,b",Sınır içeren bir alan — alanı tırnak işaretleriyle sarın
"a b"U+000ASatır sonu içeren bir alan — alanı tırnak işaretleriyle sarın
" a" Öncü veya sondaki boşlukları koruyunİşaretlenmemişte, birçok ayrıştırıcı onları kırpar.
'=SUM(A1)=E-tablonun hücreyi formül olarak yürütmesini durdurun= + - veya @ ile başlayan değerlere uygulanır. Bu formül enjeksiyonudur.

SQL değişmezleri ve tanımlayıcıları

6

Bunları okuyun; yazmayla. Bunun yerine parametreli sorgular kullanın.

KaçışAnlamNe zaman ihtiyacınız varBağlamda
'''Bir dize değişmezinde tırnak işareti — iki katına çıkarın'O''Brien'
"order"orderSütun adı olarak ayrılmış bir sözcükÇift tırnaklar standarttır; SQL Server [parantez] kullanır.
`order`orderMySQL ve MariaDB'de aynı
\%%LIKE deseni içinde gerçek bir % işareti
\__LIKE deseni içinde gerçek bir _ işareti
$tag$ … $tag$'PostgreSQL dolar tırnaklama — içinde hiç kaçış yapılmazBir kodun gövdesi için yararlı, nerede her tırnak işaretini iki katına çıkarmak okunamaz.

Kabuk argümanları

6

Tek tırnak kesildir, çift tırnak hala değişkenleri genişletir.

KaçışAnlamNe zaman ihtiyacınız varBağlamda
'…'$ ` \İçeri her şey kerildirEn güvenli tırnaklama — ancak tek bir tırnak içeremez.
"…"* ? spaceGlobüller ve boşluklar güvenli, değişkenler hala genişlerAlways quote variables: "$var", never bare $var.
\ Bir boşlukta işaretlenmemiş bir dosya adında
\$$Çift tırnaklar içinde gerçek bir dolar işareti
\``Gerçek bir arka tırnak, komut ikamesi değil
'\'''Tek tırnaklar içinde tek tırnakKapat, kaçış, yeniden aç — doğrudan iç içe geçmesi için bir yol yoktur.

FAQ

Windows dosya yolu neden JSON'da kırılır?
Çünkü bir ters eğik çizgi JSON dizesinde bir kaçış dizisini başlatır, bu nedenle C:\dir C olarak okunur, sonra geçersiz bir kaçış. Doğru yazılan değer "C:\\dir" — dosyada iki ters eğik çizgi, ayrıştırılmış dizede bir. İleri eğik çizgiler Windows'ta da çalışır ve sorunu tamamen önler.
%20 veya + bir URL'de boşluk için doğru mu?
Her ikisi de farklı yerlerde doğru. %20 bir URL'de herhangi bir yerde doğru. Artı işareti sadece application/x-www-form-urlencoded olarak kodlanmış bir sorgu dizesi içinde boşluk anlamına gelir — bir yol segmentinde gerçek bir artı işaretidir. Emin olmadığınızda %20 kullanın, çünkü her yerde doğru olur.
CSV alanının içine tırnak işaretini nasıl koyarım?
Alanı tırnak işaretleri ile sarın ve iç tırnak işaretini iki katına çıkarın: "say \"hi\"". Bu RFC 4180'dir ve bir CSV'nin neden çift tırnak işaretleri ile dolu olması bozulmaz. Bir ters eğik çizgi uyumlu bir CSV ayrıştırıcısı için hiçbir anlam ifade etmez.
CSV formül satırındaki ilk apostrof ne içindir?
Bir formül enjeksiyonunu defuse eder. =, +, - veya @ ile başlayan bir hücre, dosya bir elektronik tabloda açıldığında formül olarak yürütülür, bu nedenle güvenilmeyen bir kaynaktan =SUM(A1) gibi bir değer kod olur. Önüne bir apostrof koyarak hücrenin metin olarak okunmasını zorlarsınız.
SQL'i elle kaçırmalı mıyım?
Hayır. Bir tırnak işaretini iki katına çıkarmak burada belgelenmiştir çünkü kaçırılmış SQL yazmanız gerekmez — parametreli sorgular kullanın ve sürücüsü değeri işlemesine izin verin. Elle kaçışlama SQL enjeksiyonunun kaynağı olup, denetim yoluyla güvenli olan bir versiyonu yoktur.