= Tarantula
== DESCRIPTION
Tarantula is a big fuzzy spider. It crawls your Rails application, fuzzing data to see what breaks.
== Usage
#!sh
rake tarantula:setup
Creates a Rails integration test that looks like this, filling in your own auth params. You will probably want to include all fixtures.
require 'relevance/tarantula'
# in your test
def test_with_login
post '/sessions/create', :password => 'your-pass'
follow_redirect!
tarantula_crawl(self)
end
If you want to set custom options, you can get access to the crawler and set properties before running it. For example, this would turn on HTMLTidy.
def test_with_login
post '/sessions/create', :password => 'your-pass'
assert_response :redirect
assert_redirected_to '/'
follow_redirect!
t = tarantula_crawler(self)
t.handlers << Relevance::Tarantula::TidyHandler.new
t.crawl '/'
end
Assuming your project is at /work/project/:
#!sh
cd /work/project
rake tarantula:test
== Verbose Mode
If you run the test you will get a report in tmp/tarantula. You can also set VERBOSE=true to see more detail as the test runs.
For more options see the test suite.
== Allowed Errors
If, for example, a 404 is an appropriate response for some URLs, you can
tell Tarantula to allow 404s for URLs matching a regexp:
t = tarantula_crawler(self)
t.allow_404_for %r{/users/\d+/}
== Custom Attack Handlers
You can specify the attack strings that Tarantula throws at your application.
def test_tarantula
t = tarantula_crawler(self)
Relevance::Tarantula::AttackFormSubmission.attacks << {
:name => :xss,
:input => "",
:output => "",
}
Relevance::Tarantula::AttackFormSubmission.attacks << {
:name => :sql_injection,
:input => "a'; DROP TABLE posts;",
}
t.handlers << Relevance::Tarantula::AttackHandler.new
t.fuzzers << Relevance::Tarantula::AttackFormSubmission
t.times_to_crawl = 2
t.crawl "/posts"
end
This example adds custom attacks for both SQL injection and XSS. It also tells tarantula to crawl the app 2 times. This
is important for XSS attacks because the results won't appear until the second time tarantula performs the crawl.
== Install
See the rakefile for dependencies, or just let Rubygems handle it.
The latest and greatest gem will always be available from Github:
gem install relevance-tarantula --source http://gems.github.com
To setup tarantula in your application add the following line into either config/environment.rb or config/environments/test.rb (preferred).
This assumes that you have Rails 2.1 or higher installed.
config.gem 'relevance-tarantula', :source => "http://gems.github.com", :lib => 'relevance/tarantula'
Since rails doesn't (yet) support loading rake tasks that live inside gems you will need to update your Rakefile. This assumes that you have vendored tarantula. Simply run
cd vendor/gems
gem unpack relevance-tarantula
You can then add the following line into your Rakefile, substituting the proper version of relevance-tarantula in the path.
load File.join(RAILS_ROOT, "vendor/gems/relevance-tarantula-0.0.8.1/tasks/tarantula_tasks.rake")
You can also grab it from Rubyforge, where we will push stable releases but may not be as bleeding edge as the Github gem.
gem install tarantula
== Bugs/Requests
Please submit your bug reports, patches or feature requests at Lighthouse:
http://relevance.lighthouseapp.com/projects/17868-tarantula/overview
== License
Tarantula is released under the MIT license.