2011-06-28 11 views
2

私は、人々が自分のウェブサイトと一緒にコメントを残すことができるコメントシステムを持っています。レールはデフォルトですべてをエスケープするので、XSSを避ける​​ために何もしません。何らかの理由でURLがエスケープされません。私は、単純なヘルパー持っているユーザ名を表示するためにレールでエスケープURL

def display_name(name, site) 
    if !site.blank? 
    return link_to(name, site) 
    else 
    return name 
    end 
end 

をしかし、あなたには、JavaScriptのようなもの置く場合:(1)それがページに直接注入を受けるウェブサイトのフィールドにアラートを - 任意のアイデア方法これを逃れるために?

答えて

2

JavaScriptをエスケープしても、悪意のあるユーザーは引き続きユーザーのデータに影響を与える可能性のあるURLを削除するなどのURLを作成できます。 URLを収集する際にそのURLを確認してみませんか?

validates :attribute, :url => true 

Thong KuahのUrlValidatorを使用することをおすすめします。

+0

ありがとうございます - 私はそれが解決されなければならない方法だと思います。しかし、urlがnil(または空の文字列)でない場合、どのように検証を実行すればよいか教えてください。 –

+0

代わりにこのバージョンを使用してください:https://gist.github.com/1051088。これで 'validates:attribute、:url => {:allow_nil => true、:allow_empty => true}'のように呼び出されます。 –