Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.www.php > #22236 > unrolled thread

PDO è sicuro?

Started bySandro kensan <kensan@kensan.it>
First post2018-09-13 00:02 +0200
Last post2018-09-13 15:13 +0200
Articles 6 — 4 participants

Back to article view | Back to it.comp.www.php


Contents

  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

#22236 — PDO è sicuro?

FromSandro kensan <kensan@kensan.it>
Date2018-09-13 00:02 +0200
SubjectPDO è 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]


#22237

Fromfmassei@gmail.com
Date2018-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]


#22238

FromSandro kensan <kensan@kensan.it>
Date2018-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]


#22239

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2018-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]


#22242

FromSandro kensan <kensan@kensan.it>
Date2018-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]


#22245

FromRoberto Tagliaferri <tagliaferri@bofhland.org>
Date2018-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