2011-06-17 11 views
6

.NET Framework'te XPATH enjeksiyonunu nasıl önleyebilirim?.NET'te XPath/XML enjeksiyonu nasıl önlenir

Daha önce XPATH ifadeleri oluşturmak için dize birleştirme kullanıyorduk, ancak son kullanıcıların bazı isteğe bağlı XPATH çalıştırabildiğini gördük. Örneğin:

string queryValue = "pages[@url='" + USER_INPUT_VALUE + "']"; 
node = doc.DocumentElement.SelectSingleNode(queryValue); 

o giriş dizeleri tek ve çift tırnak atmak için yeterli olur mu?

Veya, .NET framework parametreli XPATH sorgularını destekliyor mu?

cevap

8

bir XPath enjeksiyon önlenmesinde ana fikri, değerlendirme işlemi sırasında, kullanıcı tarafından girilen değerleri ile ikame edilecek olan, içinde kullanımı ve değişkenler (parametreleri) izin vermek istediğiniz XPath ifade önceden hazırlanması için olup. .NET yılında

:

  1. XPath Expresion XPathExpression.Compile() ile önceden derlenmiş var. XPathExpression.SetContext() Yöntem

  2. Kullanım bağlam olarak kullanıcı tarafından girilen değerlere bazı özel değişkenleri gideren XsltContext nesneyi belirtmek için.

Sen değişkenleri here içeren bir XPath ifadesini değerlendirmek konusunda daha fazla bilgi edinebilirsiniz.

Bu metin, güzel ve eksiksiz örnekler içermektedir.

2

Tam yazılmış XsltTransform'u kullanırsanız, güçlü bir şekilde yazılan parametreler kullanılabilir.

+0

Benim durumumda, bir XML dosyasındaki bir düğümü aramaya çalışıyorum. Yani XSLT çok fazla. – frankadelic

+0

Güçlü bir şekilde yazılan parametreler sadece bir XSLT dönüşümü kullanmakla kalmaz - cevabımı görün. –

0

Çok yazılan parametreler yerine, kullanıcı seçeneklerini azaltabilirsiniz. Eğer istemiyorsan onlara neden tam kontrol verirsin?

Kullanıcıya seçim yapmak için birkaç seçenek sunun ve sonra sorguyu oluşturun.

Kullanıcının herhangi bir dizeye girmesine izin vermek, sorun veya çok iş istemektir.

+0

Sizi dezenfekte etmek gibi sesler öneriyorsunuz. XPATH için filtrelenmesi gereken karakter kümesini sağlayabilir misiniz? – frankadelic

+0

@frankadelic: "Bir dizi karaktere" ihtiyacınız yok. XPath enjeksiyonundan korunma yolu, değişkenleri içeren önceden derlenmiş bir XPath ifadeleri kullanmaktır. Açıklama için yanıtımı ve ilgili .NET belgelerine bağlantılar konusuna bakın. –

+0

Evet, demek istediğim buydu. Dize girişine izin verme. Bazı seçenek düğmeleri verin ve onay kutularını ve kodları kontrol edin. –

1

Eğer XPath işlemciniz olarak Saxon kullanıyorsanız, parametreli XPath mümkündür.