curl Helper für REST

In unserem heutigen Script-Tip stellen wir euch einen kleinen Helfer für REST-Schnittstellen vor. Das Script ruft im Hintergrund das curl-Kommando auf. Durch die Konfiguration-Parameter werden die Übergabe-Parameter auf ein Minimum reduziert.

Quellcode:
 
[bash language="wrap-line=true"]
#!/bin/bash
AUTH="benutzer:passwort"
BASE="http://example.com:3000"
METHOD=$1
DEST="$BASE$2"
XML=$3

# Sicherstellen, dass alle nötigen Parameter übergeben wurden...
if [ $# -eq 0 ]; then
echo "Aufruf: ./`basename $0` HTTP-METHOD ZIEL_URI [XML]"
echo "Beispiel: ./`basename $0` POST "/accounts" "test@example.com""
exit 1
fi

# Rufe CURL mit den übergebenen Parametern auf
curl -H 'Accept: application/xml' -H 'Content-Type: application/xml' -w 'nHTTP STATUS: %{http_code}nTIME: %{time_total}n' 
-X $METHOD 
-d "$XML" 
-u "$AUTH" 
"$DEST"

exit 0
[/bash]

Proxy für open-uri verwenden

In vielen Umgebungen ist der direkte Zugriff auf z.B. Web-Inhalte nur über einen Proxy möglich. In unserem heutigen Script-Tip zeigen wir euch wie ihr für open-uri einen Proxy setzen könnt.

[ruby]
require ‚open-uri‘

url = ‚http://www.example.com/‘
proxy_adresse = ‚http://123.456.789.10‘
proxy_port = ‚8888‘

seite = open(url, :proxy => (proxy_adresse + ":" + proxy_port))

[/ruby]

Parameter an send Methode übergeben

Wenn der direkte Aufruf eine Methode nicht möglich ist oder auch häufig bei der Meta-Programmierung, kann in Ruby die send-Methode verwendet werden. Diese Methode wird von Ruby selber benutz um Methoden in Klassen aufzurufen.

Da Methoden auch Parameter erwarten können, wollen wir euch in unserem heutigen Script-Tip zeigen wie das geht.

[ruby]

class MeineKlasse
def hallo(*args)
"Hallo " + args.join(‚ ‚)
end
end

mk = MeineKlasse.new

mk.send :hallo, "ihr", "lieben", "Leser"

#=> "Hallo ihr lieben Leser"

[/ruby]

Screencast: 7 Sicherheitstips

Auf Screencasts.com ist heute ein weiterer Screencast erschienen. In dieser Folge werden sieben Tips beschrieben um die Sicherheit innerhalb Rails-Applikationen zu erhöhen.

Downloadlinks:

Download (22.2 MB, 14:53)

Alternativer Download for iPod & Apple TV(16.9 MB, 14:53)

Weitere Ressourcen:

  • Rails Security Guide
  • Full episode source code

Links und Quellcodes zu den einzelnen Beispielen:

1 Mass Assignment:

[ruby]

# script/console
p = Project.find(2)
p.update_attributes(:task_ids => [4])
p.tasks

# models/project.rb
attr_accessible :name, :photo
[/ruby]

2 File Uploads
Disabling Script Execution with Apache

[ruby]
# models/project.rb
validates_attachment_content_type :photo, :content_type => [‚image/jpeg‘, ‚image/png‘]
# more security required
[/ruby]

3 Filter Log Params
Episode 9: Filtering Sensitive Logs

[ruby]
# application_controller.rb
filter_parameter_logging :password
[/ruby]

4 CSRF Protection
Cross-site Request Forgery
Rails authenticity token with jQuery

[ruby]
# application_controller.rb
protect_from_forgery
[/ruby]

5 Authorizing Ownership

[ruby]
# projects_controller.rb
def show
@project = current_user.projects.find(params[:id])
end
[/ruby]

6 SQL Injection
SQL Injection
Episode 25: SQL Injection

[ruby]
# projects_controller.rb
def index
@projects = current_user.projects.all(:conditions => ["name like ?", "%#{params[:search]}%"])
end
[/ruby]

7 HTML Injection (XSS)
Cross Site Scripting
Episode 27: Cross Site Scripting

[ruby]
<!– projects/show.html.erb –>
<%=h task.name %>
[/ruby]

RGB Werte in HEX umwandeln

Hin und wieder ist es nötig Farbwerte in RGB in die entsprechende HEX-Form umzuwandeln. Die HEX-Form kann dann z.B. in CSS etc. verwendet werden. In unserem heutigen Script-Tip stellen wie euch ein Ruby-Script vor, dass euch bei der Konvertierung unterstützen kann.

Das Script ließe sich auch in Rails-Applikationen einsetzen, wenn dort eine Konvertierung nötig ist.

[ruby]

#!/usr/bin/env ruby
# rgb-konverter.rb

if ARGV.size < 3 then
puts "Falsche Anzahl an Argumenten: Es müssen drei Werte übergeben werden!"
exit
end

konvertierter_string = []

for arg in ARGV do
konvertierter_string << "%02x" % arg.to_i
end

puts "##{konvertierter_string.join}"

[/ruby]

Das Script ließe sich folgendermaßen benutzen

[bash]
./rgb-konverter.rb 0 255 255
#00ffff
[/bash]

Rails Magazine Version 4

Das freie Railsmagazin ist in Version 4 erschienen. Die 32 seitige Ausgabe enthält Artikel aus verschiedenen Bereichen der Rails/Web-Entwicklung und Interviews aus Ruby und Rails-Szene.

Dies ist der Inhalt dieser Ausgabe:
A Word From the Editor by Olimpiu Metiu
Background Processing with Delayed_Job by James Harrison
Generating PDF with ODF templates by Rodrigo Rosenfeld Rosas
Interview with Yehuda Katz by Yehuda Katz and Rupak Ganguly
Interview with David Heinemeier Hansson by Mark Coates
Feel the Radiance with Radiant CMS by Saurabh Bhatia
Interview with Thomas Enebo by Thomas Enebo and Rupak Ganguly
Oracle Tips and Tricks by Greg Donald
Ruby Kaigi Rails Magazine Exclusive Coverage by Khaled al Habache
RubyKaigi 2009 Roundup by Ehab El-Badry
Interview with Matz by Yukihiro Matsumoto and Muhammad Ali
Interview with Koichi Sasada by Koichi Sasada and Muhammad Ali

Die aktuelle Ausgabe findet ihr uner folgender URL: http://railsmagazine.com/issues/4

Rails 2.3.4 veröffentlicht

Ruby 2.3.4 wurde soeben veröffentlicht. Das Release behebt ein paar Fehler und vor allen Dingen schließt es ein paar gefundne Sicherheitslöcher die entdeckt wurden.

Securityfixes:

  • XSS-Vulnerability
  • MessageVerifier
  • CookieStore

Bugfixes:

Es wurden ca. 100 Bugfixes vorgenommen. Bei interesse findet ihr im Changelog alle Details dazu

New Features:

  • Das i18n plugin läd nun automatisch locales files
  • seed.rb is t nun die Standard-Datei um Daten während der Migration in die DB zu laden

Zeitgesteuerte Programmausführung ohne cron

Hin und wieder ist nötig Scripte/Programme zu einem bestimmten Zeitpunkt auszuführen. Auf unixoiden System wird in der Regel cron oder at dafür benutzt. Bei Windows kommt hierfür häufig die Services zum Einsatz. Wenn all dies nicht möglich ist oder man lieber bei Ruby bleiben will, kann unseren heutigen Script-Tip dafür benutzen.

Bei dieser Lösung wird lediglich Ruby (und selbstverständlich das auszuführende Programm) benötigt.

[ruby]

#!/usr/bin/ruby

def background_run_at(time)
fork do
sleep(1) until Time.now >= time
yield
end
end

heute = Time.now
mittag = Time.local(heute.year, heute.month, heute.day, 12, 0, 0)
raise Exception, "Es ist bereits mittag" if mittag < Time.now

background_run_at(mittag) { puts "Am mittag ausgeführt!" }

[/ruby]

Ruby im Webbrowser (wieder verfügbar)

Viele kennen die irb Ruby Konsole von „Why The Lucky Stiff“. Die Konsole lief im Browser und jeder konnte so seine ersten Ruby-Geh-Versuche im Browser testen bevor man sich den Interpreter installiert hat. Nach dem misteriösen Verschwinden von Why war eine zeitlang unklar was mit seinen Projekten passieren würde.

Inzwischen hat sich die Lage „entspannt“ und die Projekte haben ein anderes Zuhause auf Github gefunden.

Auch die irb-Browser-Konsole ist wieder online und jeder kann sie unter folgender Adresse benutzen: http://tryruby.sophrinix.com/

Phusion Passenger 2.2.5 erschienen

Phusion Passenger, ein Modul um Rails-Applikationen in Apache oder Nginx laufen zu lassen, ist in Version 2.2.5 erschienen. Es ist ein Bugfix-Release und behebt Fehler die von der Comunity gemeldet wurden. Auf der Projekt-Seite werden alle Anpssungen und Fixes, aufgeteilt in Apache und Nginx, aufgelistet.

Die Liste der Veränderungen findet ihr unter folgender URL: http://blog.phusion.nl/2009/09/01/phusion-passenger-2-2-5-released/

Passenger läßt sich mit den herkömmlchen gem Tools installieren und aktualisieren

[bash]

gem install passenger
passenger-install-apache2-module
passenger-install-nginx-module

[/bash]