ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Leere Seite bei Aufruf einer Action
BeitragVerfasst: 12 Apr 2007, 16:52 
Offline
Nuby

Registriert: 12 Apr 2007, 09:38
Beiträge: 3
Wohnort: Hamburg
Hallo, was mache ich nur falsch!!!!

mein controller



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class SessionsController < ApplicationController
def login
if request.post?
user = User.find_by_login_and_password(params[:login], params[:password])
if user
session[:user] = user.id
redirect_to :controller => ''
else
flash.now[:message] = "Username oder Passwort ung��ltig"
end
end
end

def logout
session[:user] = nil
redirect_to :action => 'login'
end
end


login.rhtml



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<% form_tag  do %>

Username:
<br/>
<%= text_field_tag "login" %>
<br/>
<br/>
Passwort:
<br/>
<%= password_field_tag "password" %>
<br/>
<br/>
<%= submit_tag "Einloggen"%>

<% end %>


Das Resultat ist eine lehre Seite wenn ich (http://127.0.0.1:3000/Sessions/login) aufrufe warum?


>>>>> Edit Moderator WoNáDo: Hinweis auf Rails eingefügt, da meiner Meinung nach ein Rails-Problem vorliegt.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 12 Apr 2007, 19:04 
Offline
Obfuscator
Benutzeravatar

Registriert: 01 Jun 2005, 09:34
Beiträge: 553
Ich weiß zwar nicht, wo dein Fehler liegt, aber mir fällt da ein Design-Fehler ein. Wenn du die korrekten Daten bei einem Login überprüfst indem du nach einem Eintrag in der Datenbank mit passendem Benutzernamen und Passwort suchst, dann ist das ein ziemliches Sicherheitsloch. Das kann man einfach durch SQL-Injection aushebeln (Ich spreche hier von deiner User.find_by_login_and_password Routine).
Besser ist, wenn man nach dem Benutzer in der Datenbank sucht und dann das Passwort vergleicht.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 12 Apr 2007, 19:59 
Offline
Böser Admin
Benutzeravatar

Registriert: 29 Jul 2005, 22:41
Beiträge: 2065
Wohnort: Beijing
arthur.spooner hat geschrieben:
Das kann man einfach durch SQL-Injection aushebeln

Ähm sorry, könntest du ein Beispiel für eine solche SQL Incection über die find_by_.. Methode geben? Es wäre mir neu, wenn ActiveRecord die Parameter nicht entwerten würde.


der
Daniel

_________________
mruby.sh | Ruby-Mine | Homepage


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 12 Apr 2007, 20:21 
Offline
Obfuscator
Benutzeravatar

Registriert: 01 Jun 2005, 09:34
Beiträge: 553


1
2
3
def User.find_by_name_and_password(name, password)
find(:first, :conditions => "name='#{name}' AND password='#{password}'")
end

Wenn du jetzt den String ' OR 1--' als Passwort sendest, dann ergibt das folgendes SQL Statement:



SELECT * FROM users WHERE name='...' AND password='' OR 1 --''

OR 1 ist immer TRUE und damit ist die Condition immer TRUE.
Sehe ich das nicht richtig so?


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 12 Apr 2007, 20:26 
Offline
Böser Admin
Benutzeravatar

Registriert: 29 Jul 2005, 22:41
Beiträge: 2065
Wohnort: Beijing
arthur.spooner hat geschrieben:
Sehe ich das nicht richtig so?

Das ist schon richtig so, aber das beschriebene Beispiel von florianM verwendet doch garkeine direkte SQL-Condition sondern die :find_by Methode. Und wenn ich dort ein enstsprechenden String übergebe wurde der damals zumindest entwertet. Wäre dies heute nicht mehr der Fall, so würde ich dies als böse Sicherheitslücke in Rails allgemein ansehen, deshalb frage ich ja auch nach. Kann ja durchaus im Bereich des möglichen sein, nur dann müsste ich definitiv einige meiner alten Applikationen ändern :)



der
Daniel

_________________
mruby.sh | Ruby-Mine | Homepage


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 12 Apr 2007, 20:34 
Offline
Interpreter
Benutzeravatar

Registriert: 03 Jul 2006, 14:53
Beiträge: 4872
Wohnort: RLP
arthur.spooner hat geschrieben:


1
2
3
def User.find_by_name_and_password(name, password)
find(:first, :conditions => "name='#{name}' AND password='#{password}'")
end

Wenn du jetzt den String ' OR 1--' als Passwort sendest, dann ergibt das folgendes SQL Statement:



SELECT * FROM users WHERE name='...' AND password='' OR 1 --''

OR 1 ist immer TRUE und damit ist die Condition immer TRUE.
Sehe ich das nicht richtig so?


Deswegen verwendet man das auch nicht. Das heisst in Rails:



1
2
3
User.find_by_name_and_password(name, password)
find(:first, :conditions => ["name=? AND password=?", params(:user), params(:password)])
end


Das escaping übernimmt ActiveRecord. _Niemals_ SQL-Strings selbst zusammenbauen, die Bibliothek kann das meist besser.

Ich kann so spontan den Fehler oben auch nicht entdecken - ich vermute, dass es an den ungenügend ausgefüllten Tags im View liegt. Kannst du vielleicht mal den Quellcode angeben, den der Browser zeichnet? Oder ist der auch leer?


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 12 Apr 2007, 20:55 
Offline
Nuby

Registriert: 12 Apr 2007, 09:38
Beiträge: 3
Wohnort: Hamburg
Ist das Login verfahren sicher oder nicht :?:
Könnt ihr mir dann vielleicht ein einfaches Login System empfehlen


Ja es wird auch kein Quellcode im Web Browser Angezeigt !!!!

Danke für die schnelle Antwort :!: :!:


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 12 Apr 2007, 21:39 
Offline
Geselle

Registriert: 02 Nov 2006, 17:55
Beiträge: 103
Wohnort: Erfurt
Die Abfrage ist so Okay, da kann man keine SQL Incection machen (ich gehe mal sehr stark davon aus).
Ich habe gerade dein Code getestet und ich habe keine leere Seite, egal in welchem Environment (production, testing, development).
Das verhalten ist auch sehr merkwürdig...


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 12 Apr 2007, 23:44 
Offline
Interpreter
Benutzeravatar

Registriert: 03 Jul 2006, 14:53
Beiträge: 4872
Wohnort: RLP
Hast du mal in die Logs geschaut, ob ein Fehler aufgetreten ist? Wenn Rails ganz heftig crasht (nämlich in dispatch.cgi) kriegst du keine Fehlermeldung.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 12 Apr 2007, 23:57 
Offline
Nuby

Registriert: 12 Apr 2007, 09:38
Beiträge: 3
Wohnort: Hamburg
Das wirft er aus :!: :!:


Processing SessionsController#login (for 127.0.0.1 at 2007-04-12 23:51:05) [GET]
Session ID: 44a9fbdda0037490d88633bc711bd746
Parameters: {"action"=>"login", "controller"=>"sessions"}
Rendering sessions/login
Completed in 0.02000 (50 reqs/sec) | Rendering: 0.01000 (50%) | 200 OK [http://127.0.0.1/sessions/login]


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 13 Apr 2007, 08:17 
Offline
Interpreter
Benutzeravatar

Registriert: 03 Jul 2006, 14:53
Beiträge: 4872
Wohnort: RLP
Ah... versuch mal




<%= form_tag do%>


(Beachte den Unterschied... ein = mehr)

Gruß
Skade


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 13 Apr 2007, 09:28 
Offline
Geselle

Registriert: 02 Nov 2006, 17:55
Beiträge: 103
Wohnort: Erfurt
Skade hat geschrieben:
Ah... versuch mal



<%= form_tag do%>


Nein auf keinen Fall so, dass bringt einen 'compile error'.
Aber wie gesagt ich habe den Code bei mir getestet (mit copy & paste übernommen) er funktioniert.

Hast du mal ein paar Infos wie:
- welcher Server
- welches Environment
- welche Rails Version
usw.

Ist evtl. ein Fehler in deiner applications.rhtml oder was auch immer du für das Layout benutzt ?


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 13 Apr 2007, 15:19 
Offline
Obfuscator
Benutzeravatar

Registriert: 01 Jun 2005, 09:34
Beiträge: 553
Skade hat geschrieben:
Das escaping übernimmt ActiveRecord. _Niemals_ SQL-Strings selbst zusammenbauen, die Bibliothek kann das meist besser.

Du hast natürlich recht. In diesem Fall würde das SQL-Statement dann so aussehen:



SELECT * FROM users WHERE (users.`name` = '...' AND users.`password` = '\' OR 1 --\'\'' )


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 18 Apr 2007, 13:39 
Offline
Schüler
Benutzeravatar

Registriert: 26 Feb 2007, 12:42
Beiträge: 37
Wohnort: Berlin
Hast Du auch eine sessions.rhtml oder application.rhtml, wo die tags html, body usw drin vorkommen? Deine login.rhtml ist ja höchstens ein partial template...


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 18 Apr 2007, 17:26 
Offline
Meister
Benutzeravatar

Registriert: 13 Mär 2005, 18:02
Beiträge: 224
Wohnort: Düsseldorf
arthur.spooner hat geschrieben:
Skade hat geschrieben:
Das escaping übernimmt ActiveRecord. _Niemals_ SQL-Strings selbst zusammenbauen, die Bibliothek kann das meist besser.

Du hast natürlich recht. In diesem Fall würde das SQL-Statement dann so aussehen:



SELECT * FROM users WHERE (users.`name` = '...' AND users.`password` = '\' OR 1 --\'\'' )


Sicher, dass single quotes nicht mit single quotes escaped werden? :>

@topic
form_tag ohne action URL ist ungut.

Hier aus der rails api ein Beispiel, wie man form_tag benutzt:



1
2
3
<% form_tag '/posts' do -%>
<div><%= submit_tag 'Save' %></div>
<% end -%>


Hoffentlich liegts daran. Sonst mal Pfade überprüfen, also ob login.rhtml lesbar ist und auch in #/views/sessions/ liegt.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: