2012-01-21 11 views
9

Ho esperienze con fissaggio iniezioni SQL su MySQL, ma cosa devo fare attenzione su MongoDB usando il driver php? Nella maggior parte delle pagine ottengo i dati tramite GET/POST e la ricerca/inserimento del sistema. Cerco tramite UDID/altri campi e posso inserire qualsiasi valore di stringa. Inoltre ottengo i cookie dell'utente tramite javascript.preoccupazioni di sicurezza durante l'utilizzo di PHP MongoDB conducente

  1. Quindi quando GET/POST, sto aggiungendo a ciascuna funzione htmlentities variabile?

  2. Cosa dovrebbe sostituire mysql_real_escape_string? Dovrei usarlo?

Così, per esempio, quando si fa

$download = array('url' => $_GET['url']); 

$downloads->insert($download); 

È questo OK?

  1. C'è un modo per verificare se una stringa è davvero un UID?

  2. Qualsiasi pensare che dovrei essere a conoscenza quando si utilizza MongoDB e PHP? Ricevo i miei cookie utilizzando javascript e effettuo ricerche nel mio database utilizzando i cookie. Che ne pensi?

risposta

5

Così, quando GET/POST, sto aggiungendo ad ogni funzione htmlentities variabili?

Non c'è bisogno di. Tuttavia, è necessario, utilizzare htmlentities quando l'output di dati generati dagli utenti a un browser, per prevenire attacchi XSS.

Cosa sostituire mysql_real_escape_string? Dovrei usarlo?

Non è necessario utilizzare mysql_real_escape_string come per MySQL. Nulla lo sostituisce su MongoDB, l'autista si occupa di evadere i dati per te.

C'è un modo per verificare se una stringa è davvero un UID?

L'unico modo per convalidarlo è interrogare MongoDB con quella stringa e verificare se esiste.

È possibile tuttavia, convalidare se il formato è corretto:

$id = '4f1b166d4931b15415000000'; 
$a = new MongoId($id); 
var_dump($a->{'$id'} == $id); // true 

$id = 'foo'; 
$a = new MongoId($id); 
var_dump($a->{'$id'} == $id); // false 

Qualsiasi pensare che dovrei essere a conoscenza quando si utilizza MongoDB e PHP? Ricevo i miei cookie utilizzando javascript e effettuo ricerche nel mio database utilizzando i cookie. Che ne pensi?

Non molto. Come per qualsiasi applicazione web, si è molto scoraggiati dall'archiviazione di dati sensibili in cookie, come identificatori utente, password, ecc. In quanto possono essere facilmente mitigati e utilizzati per accedere a parti della propria applicazione che dovrebbero essere limitate o impersonare altri utenti .

+0

oops, rimuovere UDID, volevo dire UID (_id) ... –

+0

fisso sia qui e nella tua domanda. :) – netcoder

+0

Grazie mille! È davvero buono. Ad esempio, quando si esegue $ download = array ( 'url' => $ _GET ['url'] ); $ Downloads-> inserire ($ download); È OK? –

1

Btw penso che qualcosa è mancato per esempio

yourdomain.com/login?username=admin&passwd[$ne]=1 

In SQL questo assomiglia a questo

SELECT * FROM collection 
    WHERE username="admin", 
    AND passwd!=1 

Il modo che conosco è valida per sfuggire a questa sutiations è quello di sapere che tipo di dati aspettati e gettali. Spero che la risposta sia stata utile

0

Sì, devi scappare!

Immaginate il codice del genere:

<?php 
$login = $users->findOne([ 
    'user_id' => $_GET['uid'], 
    'password' => $_GET['password'] 
]); 
?> 

e la richiesta viene:

https://example.com/login?uid=3&password[$neq]=xxx 

Questa passerà il login !!
È necessario convertire i valori GET/POST in stringa.
Non c'è bisogno di fuggire citazioni, ecc

Nel tuo caso, per evitare che gli array come 'url':

$download = array('url' => (string)$_GET['url']); 
$downloads->insert($download); 
Problemi correlati