2009-10-18 17 views
8

Çıktıları sterilize etmek için görünümlerimde ActionView yardımcı strip_tags yöntemini kullanabileceğimi biliyorum, ancak db'ye devam etmeden önce kullanıcı girdisini dezenfekte etmenin en iyi yolu nedir? Görünüm denetleyicimi denetleyicime dahil etmenin ve strip_tags yöntemini yeniden kullanmanın bir yolunu bulmalı mıyım? Rayların dünya çapında böyle bir şey yapabilecek bir şeyleri olacağını düşünmüştüm.Sanitize giriş XSS ve HTML girişi raylarda

cevap

4
+3

2 yıl sonra ve yorumsuz iki downvot - yorumlar en azından diğer kullanıcılar için daha net olan şeylere yardımcı olur. Not: cevap zamanında Rails 2 kullanıyorduk ve işler şu anki kadar büyük değildi! –

-1

Neden Kullanıcının girdileri gerekiyor? tabi Tipik

tümü kullanıcının girdi bunu yazdırmak veya çıktı daha büyük blok içinde ayrıca gömülü olduğu zaman kaçan/titiz, bağlama duyarlı kodlamasıdır.

+0

Veritabanında otururken zararlı kodları bırakmanın bir anlamı yok. Web uygulamalarına birden çok saldırı vektörü zaten ortak bir yer ve bu sadece IMO düzeltmek için kolay bir şey gibi görünüyor. Derinlemesine savunma, biliyor musun? – phreakre

+0

Raylar 3 doğru yaklaşımı alır. Programcının zaten html-safe olduğunu belirttiği özel öğeler hariç olmak üzere, html'ye çıktı olarak herhangi bir şey (kullanıcı tarafından girilen veriler dahil) otomatik olarak html-kaçar. Rails 3 derinlemesine savunma yapar ve doğru yerde ve doğru zamanda verilerden kaçınılarak doğru ve titiz bir şekilde yapar. – yfeldblum

0

belki mücevher sterilize? Bu hiç mantıklı değil! Sanitizasyonun anlamını her zaman girişleri dezenfekte etmek (kaçmak) istersiniz, çünkü sanitasyonun anlamı içeriğinizi kullandığınız bağlama bağlıdır. Herhangi bir bağlamda güvenli bir dize diye bir şey yoktur. Veritabanınızda, uygulamanızın onları bugün kullandığı senaryoda "güvenli" olan bir dizi karışık dizge istemezsiniz, çünkü yarın, onlarla farklı bir şeyler yapmak isteyebilirsiniz. Sunum katmanınız doğru şeyi yapıyorsa (içeriğe göre içerikten kaçmak), o zaman ne kadar çok tırnak, ters eğik çizgi veya DROP TABLE ifadesi olursa olsun, sorun değil.

-1

Neden kullanıcı girişlerini sterilize istiyoruz:

+0

Bazı durumlarda, veritabanına kaydetmeden önce kullanıcı girdisini "sterilize etmek" mantıklıdır. Bir kullanıcı "

Smith

" olarak onun soyadını girerse Örneğin, o zaman veritabanında html etiketi saklamak için bir anlam ifade etmiyor. Bu durumda, veritabanında soyadını kaydetmeden önce html etiketini şeritlemek güzeldir. –

+0

Enjeksiyonla ilgili orijinal soru (XSS ve HTML), bu durumda bu sanitizasyonu yaptığım * her zaman *. Ama bir şekilde ipin içine çöp atmış olsanız bile, sanitasyonun çöpü bulacağına dair şansınız nedir? Bir algoritmanın hangi bölümün olduğunu ve bir isim olmadığını anlamak zordur. Örneğin, ne zaman bir HTML öğesinin ampersan parçası ve ne zaman "Smith & Wesson" gibi bir adın parçası? Çok yakında, bununla son buluyorsunuz: http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – Enno