2012-03-28 12 views
0

Da ich ein Neuling bin, dachte ich, dass ich aus Sicherheitsgründen verstehe, was ich tun muss, aber ich brauche immer noch Hilfe.php security mit Joomla

Ich habe ein Formular, das eine Reihe von Dingen über die Details einer Kamera aufnimmt. Wie der Name der Kamera und eine Reihe anderer Optionen, die Teil eines html select sind. Ich verarbeite diese in php:

$db = &JFactory::getDBO(); 

if (isset($_POST['addcamera'])) { 

    //process changes to camera options 
    if (!empty($_POST['camera_type']) && !empty($_POST['camera_status']) && !empty($_POST['camera_name']) && !empty($_POST['camera_quality']) && !empty($_POST['email_notice'])) 
    {  
     $add_name = JRequest::getVar('camera_name', 'Default Camera', 'post', 'STRING'); 
     $add_quality = JRequest::getVar('camera_quality', '', 'post', 'STRING'); 
     $add_motion_detection = JRequest::getVar('camera_status', '', 'post', 'STRING'); 
     $add_email_notice = JRequest::getVar('email_notice', '', 'post', 'STRING'); 
     $camera_type = JRequest::getVar('camera_type', '', 'post', 'STRING'); 
     //and so on... 

     //then I add to DB 
     $query_insert_camera = "INSERT INTO #__cameras (camera_status, camera_name, camera_quality, email_notice, camera_type, camera_hash, camera_sensitivity, user_id) VALUES ('".$add_motion_detection."','".$add_name."','".$add_quality."','".$add_email_notice."','".$camera_type."','".$add_camera_hash."','".$add_sensitivity."','".$user->id."')"; 
     $db->setQuery($query_insert_camera); 
     $db->query(); 

I Verwendung jquery Validierung für meine Formen und auf der PHP-Seite der Dinge zu tun, da ich Joomla verwende ich bin mit getVar: http://docs.joomla.org/Retrieving_and_Filtering_GET_and_POST_requests_with_JRequest::getVar. Ich glaube, dass ich mich vor XSS- und SQL-Angriffen beschütze, aber könnte jemand bestätigen, dass dies der richtige Ansatz ist?

Gibt es noch etwas, das ich vermisse?

+0

Injektion: http: //en.wikipedia.org/wiki/SQL_injection, Handbuch: http: //docs.joomla.org/Accessing_the_database_using_JDatabase - "Vorbereiten der Abfrage" -Kopfzeile. –

Antwort

1

Meiner Meinung nach, solange Sie Ihren Joomla-Kern auf dem neuesten Stand halten, gibt es weniger Risiken.

Diese Links können Sie eine Idee geben, nicht nur über die XSS und SQL-Attacken in joomla für Ihre Erweiterung:

Sie eines dieser Plugins verwenden können, als gut, um Ihre Sicherheit gegen diese Angriffe zu verstärken:

Und hier ist der Code von getVar, wo man sehen kann, wie geschützt Ihre Website gegen SQL-Injection und XSS:

2

mir Sieht aus wie Sie weit offen sind SQL-Injektion - oder fehlt mir etwas.

Was passiert, wenn jemand in einem Kameranamen geht entlang der Linien von

foo';EVIL_SQL_HERE; 

soweit ich Sie ausführen sehen kann, gibt SQL es die Kriterien von STRING erfüllt.

Ich denke, Sie müssen die $ db-> getEscaped() -Funktion um jede der Variablen aus Benutzereingaben generiert (unter der Annahme Joomla 1.6+) und dann $ db-> Quote(), um Anführungszeichen um die Variablen zu umbrechen in der Datenbank gespeichert werden.

Hier ist eine Zeile aus einem ziemlich typischen Modell:

$search = $db->Quote('%'.$db->getEscaped($search, true).'%'); 
+1

Ich begann mit '$ db-> quote()' auf Joomla 1.7. Ich denke, ich sollte '$ db-> getEscaped()' stattdessen verwenden? Laut dem SQL-Abschnitt in diesem Handbuch: http://docs.joomla.org/Secure_coding_guidelines zeigt es '$ db-> quote()' ist alles was benötigt wird? Obwohl Joomla-Dokumente in der Regel sehr veraltet sind. – Tom

+0

Ich kam gerade zurück, um meinen Beitrag zu korrigieren. Sie sollten Varianten von beiden verwenden. Entkomme die Eingabe und zitiere sie vor/während des Speicherns. Ich habe gerade erst angefangen für J2 zu programmieren.Ich bin also nicht ganz auf der Höhe der Details - und es gibt anscheinend zwei Varianten der Datenbankklasse (oder zwei Möglichkeiten, sie zu verwenden), die mit der älteren J1.5-Methode und einem neuen Objekt rückwärtskompatibel sind orientierter Weg. –

+0

Es sieht aus wie Ihr Doppel mit diesem Code entkommen? Technisch ist dies auch das Äquivalent zu $ ​​such = '\'% '. $ Db-> getEscaped ($ search, true).'% \ '' ' –