Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > it.comp.www.php > #22236 > unrolled thread
| Started by | Sandro kensan <kensan@kensan.it> |
|---|---|
| First post | 2018-09-13 00:02 +0200 |
| Last post | 2018-09-13 15:13 +0200 |
| Articles | 6 — 4 participants |
Back to article view | Back to it.comp.www.php
PDO è sicuro? Sandro kensan <kensan@kensan.it> - 2018-09-13 00:02 +0200
Re: PDO è sicuro? fmassei@gmail.com - 2018-09-12 16:23 -0700
Re: PDO è sicuro? Sandro kensan <kensan@kensan.it> - 2018-09-13 11:10 +0200
Re: PDO è sicuro? Alessandro Pellizzari <shuriken@amiran.it> - 2018-09-13 10:26 +0100
Re: PDO è sicuro? Sandro kensan <kensan@kensan.it> - 2018-09-13 14:22 +0200
Re: PDO è sicuro? Roberto Tagliaferri <tagliaferri@bofhland.org> - 2018-09-13 15:13 +0200
| From | Sandro kensan <kensan@kensan.it> |
|---|---|
| Date | 2018-09-13 00:02 +0200 |
| Subject | PDO è sicuro? |
| Message-ID | <fvtgn4Fem64U1@mid.individual.net> |
In un 3ad precedente sul mod_rewrite bramante scriveva di utilizzare il
PDO per evitare l'SQL injection.
Io ho un sito che nessuno si sogna di bucare ma ho cose del tipo:
$query = "SELECT `id` FROM articolo WHERE url = :url";
$result = $conn->prepare($query);
$result->execute(array(':url' => $nome_articolo));
$row = $result->fetch(PDO::FETCH_ASSOC);
$id = $row["id"];
dove $nome_articolo è un basename:
$nome_art = basename($_SERVER['SCRIPT_FILENAME']);
ma potrebbe essere pure un $_GET.
Domanda: è un sistema sicuro per evitare l'sql injection?
--
Sandro kensan www.kensan.it & www.qiqi.it geek site
Saluto gli agenti della NSA - Hello NSA - www.nsa.gov
[toc] | [next] | [standalone]
| From | fmassei@gmail.com |
|---|---|
| Date | 2018-09-12 16:23 -0700 |
| Message-ID | <89590948-4b53-4bd5-830f-fbccfd5e190c@googlegroups.com> |
| In reply to | #22236 |
On Wednesday, September 12, 2018 at 6:02:14 PM UTC-4, Sandro kensan wrote: > <snip> > Domanda: è un sistema sicuro per evitare l'sql injection? > Sicuro è niente e tutto, basta sapere come funziona. Per il thread precedente, quando hai un query del tipo: "SELECT * FROM table WHERE id=".$_GET["param"] se id è intero, basterebbe facessi "SELECT * FROM table WHERE id=".((int)$_GET["param"]) e gestisci il caso di id non presente. Certo PDO è considerato il minimo indispensabile, ma non è la panacea per tutti i mali. Mi sembra di aver letto (qualche anno fa, a dire il vero) di un hack che sfruttava la configurazione errata degli encoding tra DB, server e stringa di richiesta. Se fosse semplice, del resto, non esisterebbero né hacker né esperti di sicurezza né tools di intrusion detection. Questo non toglie che bisogna sempre fare il massimo per le nostre abilità, e tenere il più possibile aggiornati sia il software, sia le nostre conoscenze, leggendo in giro. Ciao!
[toc] | [prev] | [next] | [standalone]
| From | Sandro kensan <kensan@kensan.it> |
|---|---|
| Date | 2018-09-13 11:10 +0200 |
| Message-ID | <fvunsdFnc81U1@mid.individual.net> |
| In reply to | #22237 |
On 13/09/2018 01:23, fmassei@gmail.com wrote: > Certo PDO è considerato il minimo indispensabile, ma non è la panacea > per tutti i mali. Mi sembra di aver letto (qualche anno fa, a dire il > vero) di un hack che sfruttava la configurazione errata degli encoding > tra DB, server e stringa di richiesta. Ok, ma questi sono casi remoti in un LAMP. C'è anche una parte di lavoro che spetta a chi fa Mysql e chi fa il PHP (PDO) per correggere bug che riguardano loro o mettere avvertenze nei manuali di PHP. > Se fosse semplice, del resto, non esisterebbero né hacker né esperti di > sicurezza né tools di intrusion detection. Questo non toglie che bisogna > sempre fare il massimo per le nostre abilità, e tenere il più possibile > aggiornati sia il software, sia le nostre conoscenze, leggendo in giro. Il "buco" c'è quasi sempre ma l'importante è che non sia una porta spalancata, io mi accontento :) Grazie per la risposta. -- Sandro kensan www.kensan.it & www.qiqi.it geek site Saluto gli agenti della NSA - Hello NSA - www.nsa.gov
[toc] | [prev] | [next] | [standalone]
| From | Alessandro Pellizzari <shuriken@amiran.it> |
|---|---|
| Date | 2018-09-13 10:26 +0100 |
| Message-ID | <fvuoqiFnlu0U1@mid.individual.net> |
| In reply to | #22236 |
On 12/09/2018 23:02, Sandro kensan wrote: > Domanda: è un sistema sicuro per evitare l'sql injection? In generale sì, è fatto apposta per quello. Ci sono cose da cui non può proteggerti. Per esempio non c'è modo di fare escape automatico del nome della tabella. Se usi un nome dinamico devi occuparti tu di fare la validazione. E di base non supporta gli array (non puoi fare `select * from tabella where valore in :valori`). Io us(av)o Aura SQL (https://github.com/auraphp/Aura.Sql/tree/3.x) che fornisce quello e altre utilità intorno a PDO. Bye.
[toc] | [prev] | [next] | [standalone]
| From | Sandro kensan <kensan@kensan.it> |
|---|---|
| Date | 2018-09-13 14:22 +0200 |
| Message-ID | <fvv33eFpin3U1@mid.individual.net> |
| In reply to | #22239 |
On 13/09/2018 11:26, Alessandro Pellizzari wrote: > On 12/09/2018 23:02, Sandro kensan wrote: > >> Domanda: è un sistema sicuro per evitare l'sql injection? > > In generale sì, è fatto apposta per quello. Ottimo. > Ci sono cose da cui non può proteggerti. Per esempio non c'è modo di > fare escape automatico del nome della tabella. Se usi un nome dinamico > devi occuparti tu di fare la validazione. Quindi nel mio esempio la tabella "articolo" soffre di sql injection nel caso in cui sia un $_GET o un $_POST o da un form. O è una costante o è generata dallo script oppure deve essere filtrata. -- Sandro kensan www.kensan.it & www.qiqi.it geek site Saluto gli agenti della NSA - Hello NSA - www.nsa.gov
[toc] | [prev] | [next] | [standalone]
| From | Roberto Tagliaferri <tagliaferri@bofhland.org> |
|---|---|
| Date | 2018-09-13 15:13 +0200 |
| Message-ID | <pndnpj$18d8$1@gioia.aioe.org> |
| In reply to | #22242 |
Sandro kensan wrote:
> On 13/09/2018 11:26, Alessandro Pellizzari wrote:
>> On 12/09/2018 23:02, Sandro kensan wrote:
>>
>>> Domanda: è un sistema sicuro per evitare l'sql injection?
>>
>> In generale sì, è fatto apposta per quello.
>
> Ottimo.
>
>> Ci sono cose da cui non può proteggerti. Per esempio non c'è modo di
>> fare escape automatico del nome della tabella. Se usi un nome dinamico
>> devi occuparti tu di fare la validazione.
>
> Quindi nel mio esempio la tabella "articolo" soffre di sql injection nel
> caso in cui sia un $_GET o un $_POST o da un form.
>
> O è una costante o è generata dallo script oppure deve essere filtrata.
mi capita di utilizzare tabelle dinamiche ma sono comunque ben conosciute..
quindi if ($tabella=='pippo'){
$tabella='pippo';
}else{
//mi stai fregando
}
--
Roberto Tagliaferri-Linux user #30785 <-> r.tagliaferri@(forse)tosnet.it
www.robyt.eu
[toc] | [prev] | [standalone]
Back to top | Article view | it.comp.www.php
csiph-web