2009-02-22 10 views
10

Sono nuovo di PHP. Nel percorso di apprendimento di linguaggio PHP, ho notato che, qualche sito sarebbe questo tipo di URL:Che cos'è il "?" simbolo nell'URL utilizzato per in PHP?

www.website.com/profile.php?user=roa3 & ...

Le mie domande:

  1. Che cos'è il "?" simbolo usato per?

  2. Se dovessi sviluppare un sito Web php, devo usarlo nel mio URL? Ad esempio, dopo aver effettuato l'accesso da un utente (roa3), reindirizzerò a "www.website.com/profile.php?user=roa3" invece di "www.website.com/profile.php"

  3. Quali sono i vantaggi e gli svantaggi del suo utilizzo?

risposta

21

buone domande, brevemente,

  1. "?" indica l'inizio dell'interrogazione della stringa che contiene i dati da passati al server. in questo caso stai passando user = roa3 alla pagina profile.php . È possibile ottenere i dati utilizzando $ _GET ['utente'] all'interno di profile.php. querystring è uno dei metodi per inviare dati al server dall'agente client. L'altro posiziona i dati nel corpo HTTP e POST sul server, non si vedono i dati POST HTTP direttamente dal browser.

  2. querystring può essere modificato dall'utente ed è visibile al pubblico. Se www.website.com/profile.php?user=roa3 è destinato a essere pubblico quindi è fine, altrimenti è possibile che si desideri utilizzare la sessione per ottenere il contesto dell'utente corrente.

  3. è un modo flessibile per passare i dati al il server, ma è visibile e modificabile agli utenti, per alcuni dati sensibili , almeno produrre un qualche tipo di hashish prima di collegarlo alla querystring , questo impedisce agli utenti di di modificarlo o di capire il significato di . Tuttavia, questo non impedisce a un hacker decente di fare qualcosa di sbagliato sul tuo sito Web . Browser diversi supportano la lunghezza massima dell'URL, il lungo URL è composto da quei parametri di querystring. Se si desidera inviare grandi quantità di dati, inserire i dati nel corpo HTTP e POST sul server.

0

Dal punto di vista del server, il? è solo un altro personaggio. PHP fornisce metodi semplici per parti dell'URL dopo il? carattere, ad es. per "/profile.php?user=roa3", PHP imposterà $ _GET ['user'] = 'roa3'.

Il motivo? è utile negli URL è che i browser possono costruire URL dinamici usando i form - nel caso precedente, mi aspetto che l'URL sia stato creato da un modulo HTTP con un campo "utente", in cui l'utente umano ha digitato "roa3".

+0

Questo è sbagliato. Il "?" non è "solo un altro personaggio" per il server. Il server divide l'URL sul "?" (se ce n'è uno). La parte prima è il file richiesto e la parte dopo è la "stringa di query", presentata al CGI come variabile di ambiente QUERY_STRING. –

+1

Probabilmente avrei dovuto dire che i server * in generale * non dovrebbero trattarlo in modo speciale. Nel caso del PHP (e della maggior parte degli altri framework web) viene fornito un trattamento, come ho discusso. La domanda non specifica CGI ovunque. – Edmund

+1

Potrebbe non essere speciale per il server, ma fa parte dello standard HTTP piuttosto che php. –

0
  1. "?"È usato per separare l'URL ei parametri. Per esempio, è come http://www.url.com/resourcepath?a=b&c=d. In questo caso a = b è come request_parameter = request_value.

  2. Ya, La sua non è consigliabile utilizzare gran parte dei parametri, perché il totale la dimensione dell'URL è limitata ed è simile alla richiesta GET, in cui tutti i parametri sono mostrati nell'URL e l'utente può modificarlo Nel tuo esempio, dì cosa succede se un utente modifica l'url su "user = techmaddy".

  3. Il vantaggio è che può essere utilizzato per il tipo di richieste GET. Lo svantaggio è bassa sicurezza, limitazione nelle dimensioni.

4

1) Se un utente accede al proprio sito, si userebbero Sessions per memorizzare ci nome utente invece di passare nella url esempio profile.php?username=roa3

2) Utilizzando un simbolo ? in l'url è generalmente considerato negativo per Search Engine Optimization. Inoltre, le url sembrano un po 'brutte. Utilizzando mod_rewrite puoi fare la stessa cosa di profile.php?user=roa3 o products.php?id=123&category=toys con: site.com/profile/roa3 o products/toys/123.

L'utilizzo del framework CodeIgniter fornisce URL amichevoli per impostazione predefinita ed elimina la necessità di ? s negli url. Vedere this page per un esempio.

3) Il simbolo ? viene anche utilizzato all'interno del codice di una pagina php. Ad esempio, un blocco if else come ad esempio:

if ($x==1) 
    $y=2; 
else 
    $y=3; 

può anche essere scritta come: "?"

$y=($x==1) ? 2 : 3; 
3

Il significa che alcune variabili GET devono seguire. L'esempio usa una variabile chiamata "utente" e assegna una variabile chiamata "roa3".

I vantaggi di utilizzare variabili GET:

  • possono essere segnalibro come parte dell'URL

Svantaggi

  • sono pubbliche .. Chiunque può intercettare e visualizzare queste informazioni . Queste richieste di URL vengono persino memorizzate nella cache dai server lungo il percorso. Così chiunque può impersonare l'utente roa3 semplicemente digitando le informazioni in mano ... anche loro potrebbero cambiare il roa3 a un utente diverso e li impersonare ..

È anche possibile utilizzare un simbolo "&" per separare molte variabili ad esempio: www.website.com/profile.php?user=roa3&fav_colour=blue

Altre opzioni:

  • variabili POST

    • È possibile inviare le variabili tramite le variabili POST.Queste variabili vengono passate nell'intestazione della richiesta, non nell'URL della richiesta. non sono immediatamente evidenti e non vengono memorizzati nella cache dai server lungo il percorso, ma possono comunque essere letti. a meno che non sia stata stabilita una connessione HTTPS.
    • le variabili in un modulo possono essere inviate dai metodi POST o GET. Si specifica questo nel "metodo" del modulo. <form action="index.php" method='post'/>
  • variabili di sessione

    • variabili di sessione vengono memorizzati sul server. Un ID di sessione viene passato all'utente e questo ID di sessione viene passato nuovamente al server ogni volta che l'utente effettua un'altra richiesta. Questo ID di sessione può quindi essere utilizzato per ottenere le variabili di sessione che sono state memorizzate. Quindi è possibile memorizzare il colore preferito di un utente, il suo nome e l'indirizzo IP, ecc. Ma è possibile memorizzarlo sul server piuttosto che sul PC di casa dell'utente.
      Gli ID di sessione possono essere rappresentati, pertanto è opportuno verificare l'IP dell'utente e/o racchiuderlo in una connessione sicura. es. https.
    • le variabili di sessione non possono essere modificate da qualcuno che ha intercettato la richiesta.
  • variabile BISCOTTO:
    Simile alle variabili di sessione, salvo che essi sono memorizzati sul PC dell'utente, non il server. Sono archiviati su un dominio e quando vengono inviati a quel dominio, inviano nuovamente le variabili nell'intestazione della richiesta al server. Ciò significa che l'utente può modificare e modificare le variabili, oppure qualcun altro potrebbe.

Per accedere a queste variabili in PHP è possibile utilizzare:

  • $x = $_GET['user'] per ottenere variabile
  • $x = $_POST['user]
  • $x = $_REQUEST['user'] - la combinazione di GET, POST e biscotto variabili
  • $x = $_COOKIE['user'] - variabili di cookie
  • $x = $_SESSION['user'] per accedere alle variabili di sessione

(user potrebbe essere sostituito con il nome della variabile che si sta utilizzando)

roba abbastanza semplice, ma importante sapere quello che fanno.

+1

Il controllo degli ID di sessione rispetto agli IP non è eccezionale se le persone si trovano dietro una farm proxy con più indirizzi IP. Inoltre, quelli che condividono un proxy non sarebbero comunque protetti da un altro. L'applicazione deve gestire questo in un altro modo: se gestisci dati sensibili: usa https. –

+0

sì è vero. Il controllo degli ip rispetto alle sessioni aumenterebbe la sicurezza, ma lascerebbe dei grossi buchi. Stabilire la sessione dopo che https è stato stabilito è sempre il più sicuro. – Bingy

+0

Solo un sidenote: è legale usare ';' per separare anche GET vars. Anche se non l'ho mai visto e quindi non lo consiglierei. – alex

6

La maggior parte delle risposte che ho visto finora sono state in termini di PHP, quando in realtà questo non è un linguaggio specifico. Le risposte date finora sono state dal punto di vista di PHP e i metodi che useresti per accedere alle informazioni differiscono da una lingua all'altra, ma il formato in cui i dati sono nell'URL (noto come Query String) rimarrà lo stesso (Es: page.ext? key1 = valore & key2 = valore & ...).

Io non conosco il tuo background tecnico o conoscenza, quindi ti prego perdonami ...

Ci sono due metodi diversi per una pagina web per fornire i dati al server web. Questi sono conosciuti come i metodi POST o GET. C'è anche un sacco di altri, ma nessuno di questi dovrebbe essere usato in qualsiasi tipo di web design quando si tratta di un utente normale.Il metodo POST viene inviato in modo invisibile al server ed è pensato per "caricare" i dati, mentre il metodo GET è visibile all'utente come stringa di interrogazione nell'URL e serve solo per ottenere informazioni "letterali".

Non tutti i siti seguono questa regola empirica, ma possono esserci motivi per spiegare perché. Ad esempio, un sito può utilizzare POST esclusivamente per aggirare il caching dai server proxy o dal browser, o perché utilizzano linguaggi a doppio byte e può causare problemi quando si tenta di eseguire un GET a causa della conversione della codifica.

Alcune risorse per circa i due metodi e quando usarli ...

http://www.cs.tut.fi/~jkorpela/forms/methods.html http://weblogs.asp.net/mschwarz/archive/2006/12/04/post-vs-get.aspx http://en.wikipedia.org/wiki/Query_string

Ora da una posizione strettamente PHP, ora ci sono 3 diverse matrici è possibile utilizzare per ottenere il informazioni che una pagina Web ha inviato al server. Dovete vostra disposizione ...

  • $ _POST [ 'nome chiave'], per afferrare solo le informazioni da un metodo POST
  • $ _GET [ 'nome chiave'], per afferrare solo le informazioni da un GET metodo
  • $ _REQUEST ['keyname'], per consentire di acquisire POST, GET e qualsiasi informazione COOKIE che potrebbe essere stata inviata. Una sorta di catchall, specialmente nei casi in cui non si conosce il metodo che una pagina potrebbe utilizzare per inviare i dati.

Non diventare sciatto andando direttamente con il metodo $ _REQUEST. A meno che tu non abbia un caso come quello sopra menzionato per la variabile $ _REQUEST, non usarlo. Vuoi provare a usare un approccio 'nega tutto e consenti x, y, z' quando si tratta di sicurezza. Cerca solo i dati che sai che il tuo sito invierà, cerca solo le combinazioni che ti aspetti e pulisci tutte le informazioni prima di usarle. Ad esempio ..

  • Non eseguire mai una valutazione() su qualsiasi cosa è stata trasmessa tramite i metodi precedenti. Non l'ho mai visto, ma ciò non significa che le persone non abbiano provato o fatto.
  • Non utilizzare mai le informazioni direttamente con i database senza di loro pulizia (la ricerca di attacchi SQL injection, se non hai familiarità con loro)

Questo è di gran lunga il fine-tutto, essere-tutto alla sicurezza PHP ma non siamo qui per quello Se vuoi saperne di più sulla linea, allora questa è un'altra domanda per SO.

Spero che questo aiuti e sentiti libero di fare qualsiasi domanda.

+1

È inoltre possibile accedere alle informazioni sui cookie con $ _COOKIE. –

1

? fa parte dello standard HTTP e non fa parte di PHP. Ho pensato di farlo notare così quando passi ad un'altra lingua e la rivedi non sei confuso pensando che PHP sia coinvolto.

Altrimenti ci sono alcune risposte eccellenti sopra.

Problemi correlati