This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org

Difference between revisions of "Input Validation Cheat Sheet tr"

From OWASP
Jump to: navigation, search
Line 10: Line 10:
 
Beyaz liste doğrulaması, kullanıcı tarafından sağlanan tüm girdi alanları için uygundur. Beyaz liste doğrulaması tam olarak neye veya nelere izin verileceğinin tanımlarını içerir ve bunların dışında kalan herşey ise yetkilendirilmeyecektir. Eğer girdi veri yapısı düzenli ise (mesela tarihler,sosyal güvenlik numaraları,posta kodları,eposta adresleri gibi) o zaman yazılım geliştirici her girdiyi doğrulamak için genellikle düzenli ifadelere dayalı olarak çok güçlü doğrulama motifleri tanımlayabilir. Eğer girdi alanı aşağı açılan bir listeden veya radyo düğmeleri tanımlanmış mevcut bir kümeden belirleniyorsa, o zaman ilk olarak girdi verisi kullanıcıya sunulan değerlerden biri ile eşleşmelidir. Doğrulaması en zor alanlar “özgür yazım alanları” (free text) olarak da bilinen alanlardır, bloglar gibi. Fakat, bu alanlar belirli bir dereceye kadar doğrulanabilse bile, yazdırılamayan karakterleri çıkarıp girdi alanı için maksimum kapasite tanımlaması yapabilirsiniz.
 
Beyaz liste doğrulaması, kullanıcı tarafından sağlanan tüm girdi alanları için uygundur. Beyaz liste doğrulaması tam olarak neye veya nelere izin verileceğinin tanımlarını içerir ve bunların dışında kalan herşey ise yetkilendirilmeyecektir. Eğer girdi veri yapısı düzenli ise (mesela tarihler,sosyal güvenlik numaraları,posta kodları,eposta adresleri gibi) o zaman yazılım geliştirici her girdiyi doğrulamak için genellikle düzenli ifadelere dayalı olarak çok güçlü doğrulama motifleri tanımlayabilir. Eğer girdi alanı aşağı açılan bir listeden veya radyo düğmeleri tanımlanmış mevcut bir kümeden belirleniyorsa, o zaman ilk olarak girdi verisi kullanıcıya sunulan değerlerden biri ile eşleşmelidir. Doğrulaması en zor alanlar “özgür yazım alanları” (free text) olarak da bilinen alanlardır, bloglar gibi. Fakat, bu alanlar belirli bir dereceye kadar doğrulanabilse bile, yazdırılamayan karakterleri çıkarıp girdi alanı için maksimum kapasite tanımlaması yapabilirsiniz.
  
Düzenli ifadeleri geliştirmek karmaşık olabilir ve bu kılavuz dökümanının içeriğinde değildir. Lakin, internet üzerinde düzenli ifadeleri geliştirebilmek için birçok kaynak bulunabilir http://www.regular-expressions.info/ ve [[OWASP Validation Regex Repository]].
+
Düzenli ifadeleri geliştirmek karmaşık olabilir ve bu kılavuz dökümanının içeriğinde değildir. Lakin, internet üzerinde düzenli ifadeleri geliştirebilmek için birçok kaynak bulunabilir,,bunlar için http://www.regular-expressions.info/ ve [[OWASP Validation Regex Repository]] adreslerine göz atabilirsiniz.
  
 
Beyaz Liste Regex Örnekleri
 
Beyaz Liste Regex Örnekleri
Line 18: Line 18:
 
     ^(AA|AE|AP|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|
 
     ^(AA|AE|AP|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|
 
     MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY)$
 
     MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY)$
 
 
  Özgür yazım alanı içinde izin verilen karakterlerin doğrulaması (rakamlar, harfler, boşluklar, .-_)
 
    ^[a-zA-Z0-9\s._-]+$ (Any number of characters)
 
    ^[a-zA-Z0-9\s._-]{1-100}$ (This is better, since it limits this field to 1 to 100 characters)
 
  Not: \s alfabe dışı herhangi bir karakteri yakalar (örnek, boşluk, tab, satırbaşı yada satır atlama [ \t\r\n])
 
  Not: Birçok düzenli ifade karakter sınıfları içinde [] kaçışa(escape) .(nokta) ihtiyaç duymaz.
 
        \. kullanımı "\" ve "." olara iki tam karakter olarak sonuçlanacağından çoğu zaman istenmez.
 
  
 
'''Java Regex Kullanım Örnekleri'''
 
'''Java Regex Kullanım Örnekleri'''
Line 46: Line 39:
  
 
* [http://jakarta.apache.org/commons/validator Apache Commons Validator]
 
* [http://jakarta.apache.org/commons/validator Apache Commons Validator]
* [[ESAPI | OWASP ESAPI Validators]]
 
 
Kendi doğrulama rutinlerinizi yazmanızdansa, girdi doğrulamalarınızı desteklemek için ESAPI'yi kullanmanız tavsiye edilir.
 
[[ESAPI | OWASP Enterprise Security API (ESAPI)]] projesi org.owasp.esapi.Validator arayüzü içerisinde tanımlanmış doğrulayıcılara ve DefaultValidator içinde örneklenmiş uygulamaya sahiptir. Bunlar:
 
 
* getValidDate()
 
* getValidSafeHTML()
 
* getValidInput()
 
* getValidNumber()
 
* getValidFileName()
 
* getValidRedirectLocation()
 
 
ESAPI ile bir önce ki örnek altta ki gibi tekrar yazılabilir:
 
 
  Genel ESAPI girdi doğrulayıcısı kullanarak düzenli ifade ile "zip" parametresinin doğrulanması
 
 
 
  public void doPost( HttpServletRequest request, HttpServletResponse response) {
 
  try {
 
  String zipCode = '''Validator.getValidInput("ChangeAddressPage_ZipCodeField",
 
    request.getParameter( "zip" ), "zipCodePattern", 10, false))''';
 
  .. do what you want with validated ‘zipCode’ param here ..
 
  } catch( ValidationException e ) {
 
  response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
 
  }
 
  }
 
 
 
  // zipCodePattern is the name of a property defined in ESAPI.properties, and its value
 
  // is the regular expression: "^\d{5}(-\d{4})?$"
 
  //
 
  // If zipcodes were a frequently used parameter in your application, we would recommend
 
  // that you create your own getValidZipCode() method that builds on top of ESAPI, to make
 
  // it even simpler for your developers to use.
 
 
* Tam ESAPI [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/index.html javadoc for ESAPI is here]
 
* Ve bu spesifik arayüz için java dökümanı: [http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Validator.html]
 
  
 
= Yazar ve Editör =
 
= Yazar ve Editör =
  
 
Dave Wichers - dave.wichers [at] aspectsecurity.com
 
Dave Wichers - dave.wichers [at] aspectsecurity.com

Revision as of 10:15, 22 August 2013

Giriş

Bu makale, uygulamalarınızda kullanılan girdi doğrulama işlevsellikleri için temiz,basit ve dava edilebilir noktalar üzerinde rehber olmaya odaklanmıştır.

Girdi Doğrulaması Beyaz Liste

Saldırıyı mümkün olduğunca en erken aşamada, kullanıcı/saldırganın isteğini işleme tabi tutma aşamasında önlemek/önlemeye çalışmak tavsiye edilir. Girdi doğrulaması, girdinin uygulama tarafından işlenmesinden hemen önce izin verilmeyen girdileri tespit etmek için kullanılabilir. Yazılım geliştiriciler saldırı karakterlerini ve “'”,”1=1” gibi karakter dizileri yada “<script>” biçimlerini tespit edebilmek için sıklıkla kara liste doğrulamasını uygularlar,fakat bu yöntem tek olarak kullanıldığında saldırgan için kara listede ki filtrelerden kaçınmak için sadece küçük bir test olacağından dolayı tam olarak sağlıklı bir yaklaşım olmaz. Buna artı olarak, bu tür filtreler çoğu zaman “O'Brian” örneğinde olduğu gibi izin verilen girdileri de (kesme işareti) “'” filtrelendiği için engelleyebilmektedir.

Beyaz liste doğrulaması, kullanıcı tarafından sağlanan tüm girdi alanları için uygundur. Beyaz liste doğrulaması tam olarak neye veya nelere izin verileceğinin tanımlarını içerir ve bunların dışında kalan herşey ise yetkilendirilmeyecektir. Eğer girdi veri yapısı düzenli ise (mesela tarihler,sosyal güvenlik numaraları,posta kodları,eposta adresleri gibi) o zaman yazılım geliştirici her girdiyi doğrulamak için genellikle düzenli ifadelere dayalı olarak çok güçlü doğrulama motifleri tanımlayabilir. Eğer girdi alanı aşağı açılan bir listeden veya radyo düğmeleri tanımlanmış mevcut bir kümeden belirleniyorsa, o zaman ilk olarak girdi verisi kullanıcıya sunulan değerlerden biri ile eşleşmelidir. Doğrulaması en zor alanlar “özgür yazım alanları” (free text) olarak da bilinen alanlardır, bloglar gibi. Fakat, bu alanlar belirli bir dereceye kadar doğrulanabilse bile, yazdırılamayan karakterleri çıkarıp girdi alanı için maksimum kapasite tanımlaması yapabilirsiniz.

Düzenli ifadeleri geliştirmek karmaşık olabilir ve bu kılavuz dökümanının içeriğinde değildir. Lakin, internet üzerinde düzenli ifadeleri geliştirebilmek için birçok kaynak bulunabilir,,bunlar için http://www.regular-expressions.info/ ve OWASP Validation Regex Repository adreslerine göz atabilirsiniz.

Beyaz Liste Regex Örnekleri

 Posta kodları için özgür yazım alanı doğrulaması (5 basamaklı artı opsiyonel -4) ^\d{5}(-\d{4})?$
 
 Aşağı açılan sabit listeden ABD eyalet seçimi veri doğrulaması
   ^(AA|AE|AP|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|
   MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY)$

Java Regex Kullanım Örnekleri

 Düzenli ifade kullanarak "zip" parametresinin doğrulanması.
 
 private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");
 public void doPost( HttpServletRequest request, HttpServletResponse response) {
 	try {
 		String zipCode = request.getParameter( "zip" );
 		if ( !zipPattern.matcher( zipCode ).matches()  {
 			throw new YourValidationException( "Improper zipcode format." );
 		}
 		.. do what you want here, after its been validated ..
 	} catch(YourValidationException e ) {
 		response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
 	}
 }

Bazı beyaz liste doğrulayıcıları faydalanabilmeniz için çeşitli açık kaynak paketleri içerisinde önceden tanımlanmıştır. Altta bu beyaz listeleri sağlayan iki paketi görebilirsiniz.

Yazar ve Editör

Dave Wichers - dave.wichers [at] aspectsecurity.com