Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Mic Mini 2: audio 48 kHz / 24-bit e protocollo OsmoAudio sotto i 100 Euro
DJI Mic Mini 2: audio 48 kHz / 24-bit e protocollo OsmoAudio sotto i 100 Euro
DJI presenta Mic Mini 2, un sistema microfonico wireless ultra-compatto progettato per democratizzare l'audio di alta qualità nella fascia entry-level. Con un peso di soli 11 grammi per il trasmettitore elimina i fastidi tipici dei modelli più pesanti sui vestiti. Nonostante la miniaturizzazione Mic Mini 2 offre prestazioni tecniche di rilievo: registrazione omnidirezionale a 48 kHz/24-bit, tre preset vocali (Regular, Bright, Rich) e un sistema di cancellazione attiva del rumore a due livelli.
Recensione Moto G77: display AMOLED e buona autonomia per il midrange economico
Recensione Moto G77: display AMOLED e buona autonomia per il midrange economico
Motorola propone in fascia media il nuovo Moto G77 5G, uno smartphone che punta sul display AMOLED da 1.5K a 120Hz, e sulla fotocamera da 108 MP con stabilizzazione ottica per affrontare la fascia media. Il tutto insieme a una batteria da 5200mAh in soli 7,3 millimetri di spessore, con una scocca certificata con standard militari
DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI ha appena ufficializzato la serie Lito, la sua nuova gamma di droni entry-level destinata a chi si avvicina per la prima volta alla fotografia aerea. Al centro dell'annuncio ci sono due modelli ben distinti per fascia di prezzo e specifiche tecniche: DJI Lito 1 e DJI Lito X1. Entrambi si collocano sotto la soglia regolamentare dei 249 grammi, che permette di volare con requisiti burocratici più semplici rispetto ai droni più pesanti.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-08-2009, 18:48   #1
bio n3t
Senior Member
 
L'Avatar di bio n3t
 
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
[PHP] SQL-INJECTION

Ciao a tutti, premetto che programmo in PHP da pochissimo. Ho sentito parlare di SQL-Injection dal mio prof e mi sono informato su cos'è. Ho capito il funzionamento, ma per prevenire questi attacchi non ho le idee chiarissime... però mi è venuta in mente una soluzione (che probabilmente esiste già) cioè controllare col javascript ogni singolo carattere inserito nel form (ad esempio dando un range dei caratteri ASCII validi) e se qualche carattere può risultare pericoloso il login fallisce, altrimenti si procede con lo script di login. Può essere un idea fattibile? Ce ne sono altre molto più semplici da implementare? La mia idea è facilmente bypassabile? Grazie a tutti quelli che risponderanno in anticipo
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:.
TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE!
Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb
bio n3t è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2009, 20:49   #2
vizzz
Senior Member
 
L'Avatar di vizzz
 
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
Quote:
Originariamente inviato da bio n3t Guarda i messaggi
Ciao a tutti, premetto che programmo in PHP da pochissimo. Ho sentito parlare di SQL-Injection dal mio prof e mi sono informato su cos'è. Ho capito il funzionamento, ma per prevenire questi attacchi non ho le idee chiarissime... però mi è venuta in mente una soluzione (che probabilmente esiste già) cioè controllare col javascript ogni singolo carattere inserito nel form (ad esempio dando un range dei caratteri ASCII validi) e se qualche carattere può risultare pericoloso il login fallisce, altrimenti si procede con lo script di login. Può essere un idea fattibile? Ce ne sono altre molto più semplici da implementare? La mia idea è facilmente bypassabile? Grazie a tutti quelli che risponderanno in anticipo
http://it.wikipedia.org/wiki/SQL_injection

queste sono le idee di base, conta che esistono funzioni specifiche di php proprio per queste necessità e anche funzioni specifiche per il motore sql (ad esempio per mysql)
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
vizzz è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2009, 20:58   #3
amedeoviscido
Senior Member
 
Iscritto dal: May 2005
Città: Napoli - Fuorigrotta
Messaggi: 471
Utilizzare solo javascript non è abbastanza, basta infatti avere un tool specifico per disabilitarlo, così la tua protezione cadrebbe.

La prima cosa da fare è vietare l'utilizzo del carattere di apice nei campi username e password, se li utilizzi tu all'interno delle query sql; questo però non è abbastanza, in quanto potrebbero utilizzare dei valori che fanno inceppare l'engine sql. Bisogna fare uno studio approfondito che, come già suggerito, dipende dal motore sql che utilizzi.

Una veloce ricerca ha tirato fuori questo esempio:

Codice:
<?php
// Quote variable to make safe
function quote_smart($value)
{
  // Stripslashes
  if (get_magic_quotes_gpc()) {
      $value = stripslashes($value);
  }
  // Quote if not a number or a numeric string
  if (!is_numeric($value)) {
      $value = "'" . mysql_real_escape_string($value) . "'";
  }
  return $value;
}

// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
  OR die(mysql_error());
// Make a safe query
$query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
          quote_smart($_POST['username']),
          quote_smart($_POST['password']));

mysql_query($query);
?>
__________________
Acquisti sul mercatino: grabrihc, LucaXbox360, Yarsha,micanto1,American horizo,Fnac,schumyFast,STECCO,Ezechiele25,17
Vendite sul mercatino: musodatopo,alexbands,mspr,anto.wajo
amedeoviscido è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2009, 22:01   #4
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Javascript non serve a nulla in questi casi, perchè la richiesta può essere inviata bypassando il js stesso.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2009, 22:10   #5
Barbalbero
Registered User
 
Iscritto dal: Aug 2006
Messaggi: 305
L'utilizzo di JEE invece di PHP è un buon rimedio
Barbalbero è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2009, 22:31   #6
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da Barbalbero Guarda i messaggi
L'utilizzo di JEE invece di PHP è un buon rimedio
Non vuol dire assolutamente nulla. Tutti i linguaggi server side forniscono gli strumenti necessari, a patto che il programmatore sia in grado di saperli far fruttare.
Per quanto nn mi piaccia il PHP non è in questa circostanza che si può mettere in evidenza la superiorità di altri linguaggi come J2EE.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2009, 22:42   #7
Barbalbero
Registered User
 
Iscritto dal: Aug 2006
Messaggi: 305
io parlo per esperienza personale. Non conosco molto php, ma conosco bene il problema della injection. In JEE l'injection è difficile che funzioni persino se il progettista si impegna a fare in modo che funzioni.

Esempio:
Codice:
public boolean login(String username, String password) {
        Query q=em.createQuery("FROM Utente u WHERE u.username=:PARAM");
        q.setParameter("PARAM", username);
        Utente u =(Utente)q.getSingleResult();
        if(u.getPassword().equals(password)) return true;
        else return false;
}
Il controllo della password viene fatto tramite codice java, pertanto non è soggetto al tipico "or username=username" nel WHERE (per fare un esempio, non ricordo la sintassi).
Inoltre ho provato anche a inserire injection con DROP TABLE ecc, prese da siti qua e là e non hanno mai funzionato, senza che io progettista nemmeno ci pensassi ad evitare che funzionassero.
Infine utilizzando JPQL invece di SQL puro si rende la vita ancora più difficile all'aspirante hacker

Ultima modifica di Barbalbero : 04-08-2009 alle 22:48.
Barbalbero è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2009, 23:29   #8
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da Barbalbero Guarda i messaggi
io parlo per esperienza personale. Non conosco molto php, ma conosco bene il problema della injection. In JEE l'injection è difficile che funzioni persino se il progettista si impegna a fare in modo che funzioni.

Esempio:
Codice:
public boolean login(String username, String password) {
        Query q=em.createQuery("FROM Utente u WHERE u.username=:PARAM");
        q.setParameter("PARAM", username);
        Utente u =(Utente)q.getSingleResult();
        if(u.getPassword().equals(password)) return true;
        else return false;
}
Il controllo della password viene fatto tramite codice java, pertanto non è soggetto al tipico "or username=username" nel WHERE (per fare un esempio, non ricordo la sintassi).
Inoltre ho provato anche a inserire injection con DROP TABLE ecc, prese da siti qua e là e non hanno mai funzionato, senza che io progettista nemmeno ci pensassi ad evitare che funzionassero.
Infine utilizzando JPQL invece di SQL puro si rende la vita ancora più difficile all'aspirante hacker
Beh stai attribuendo al linguaggio JEE una caratteristica del DBMS che sono i prepared statement.
Che mi dici di questo?
Codice:
$dbConnection = new mysqli("localhost", "user", "pass", "db");
$statement = $dbConnection->prepare("SELECT * FROM Utente u WHERE u.username = ?");
$statement->bind_param("s", $username);
$statement->execute();
Fa esattamente quello che hai scritto te in Java (nel mio caso verso MySQL).
Come vedi in questo caso il linguaggio non c'entra niente.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2009, 23:40   #9
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
se usi il php, penso che una funzione addslashes() possa prevenire la maggior parte dei tentativi (banali) di injection.
Eventualmente la funzione dedicata per il mysql è mysql_real_escape_string.
In pratica non fa altro che aggiungere dei caratteri di escape prima dei caratteri speciali. Rimangono fuori alcuni caratteri quali % che viene usato nella sintassi del LIKE, eventualmente lo correggi a mano, sempre via php.
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2009, 00:20   #10
bio n3t
Senior Member
 
L'Avatar di bio n3t
 
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
ok alcune cose le ho capite cioè quello che mi interessava.. alcuni di voi sono troppo tecnici non mi sforzo nemmeno a cercare di capire
comunque il link di wikipedia è molto esaustivo grazie.
quindi ci sono gli strumenti apposta lato server è inutile che provo altri metodi.
vi ringrazio! ciao!
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:.
TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE!
Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb
bio n3t è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2009, 00:38   #11
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Beh stai attribuendo al linguaggio JEE una caratteristica del DBMS che sono i prepared statement.
Che mi dici di questo?
Codice:
$dbConnection = new mysqli("localhost", "user", "pass", "db");
$statement = $dbConnection->prepare("SELECT * FROM Utente u WHERE u.username = ?");
$statement->bind_param("s", $username);
$statement->execute();
Fa esattamente quello che hai scritto te in Java (nel mio caso verso MySQL).
Come vedi in questo caso il linguaggio non c'entra niente.
Lui non ha utilizzato utilizzato gli statement, ma ha sfruttato le potenzialità lato container attraverso gli ejb session ed entity. Ma concordo pienamente con il fatto che i controlli siano fattibili con qualsiasi linguaggio, anche se devo dire che il tuo codice non mi sembra del tutto immune, ma bisognerebbe vederlo tutto.

Ultima modifica di nuovoUtente86 : 05-08-2009 alle 00:41.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2009, 12:27   #12
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
Lui non ha utilizzato utilizzato gli statement, ma ha sfruttato le potenzialità lato container attraverso gli ejb session ed entity. Ma concordo pienamente con il fatto che i controlli siano fattibili con qualsiasi linguaggio,
Quello però non ha niente a che vedere con la protezione da sql injection, è solo un livello di astrazione in più dovuto all'ORM che mappa la tabella su un oggetto.
Scrivere:
Codice:
"FROM Utente u WHERE u.username=:PARAM"
q.setParameter("PARAM", username);
Indica una query parametrica a cui viene fatto il bind con la variabile username allo stesso identico modo di questo:
Codice:
"SELECT * FROM Utente u WHERE u.username = ?"
$statement->bind_param("s", $username);//s indica che la variabile username è di tipo stringa
Linguaggio diverso ma la sostanza non cambia, il livello di protezione da sql injection è il medesimo.
Con questo codice posso benissimo evitare i controlli per i classici casi di inserimento/ricerca per cognomi contenenti il carattere ' è il dbms che sa che tutto quello che gli sto passando sono dati e non dati con istruzioni.

Quote:
anche se devo dire che il tuo codice non mi sembra del tutto immune, ma bisognerebbe vederlo tutto.
I difetti che puoi riscontrare sono gli stessi dell'equivalente in Java o qualunque altro linguaggio.
Senza ulteriori controlli a monte gli attacchi injection che possono andare a segno sono quelli che fanno schiantare il dbms con sequenze particolari di dati, ma questo rientrerebbe più nei bug di sicurezza del dbms che non del codice utente.
Chiaramente il mio era solo un codice di esempio che traduceva il codice java di cui sopra per quanto riguarda la parte di sql injection.

Ultima modifica di tomminno : 05-08-2009 alle 12:31.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2009, 14:40   #13
ckingpin
Senior Member
 
Iscritto dal: Feb 2008
Messaggi: 1027
ciao, ti passo la funzione che ho creato anni fà per l'esame di php

Codice:
// controlla i valori nell'array $_POST
    function SQL_Injection(){	
  		foreach ($_POST as $chiave => $elemento) {
      // elimino i caratteri _ e % sensibili per le query sql con LIKE
    	$_POST["$chiave"] = str_replace("_", "", $_POST["$chiave"]); 
    	$_POST["$chiave"] = str_replace("%", "", $_POST["$chiave"]);
			//sostituisco le parentesi angolari, onde evitare la creazione di codice html
			$_POST["$chiave"] = str_replace("<", "&lt;", $_POST["$chiave"]);
			$_POST["$chiave"] = str_replace(">", "&gt;", $_POST["$chiave"]);
    	//rimuovo gli spazi all'inizio e alla fine
			$_POST["$chiave"] = trim($_POST["$chiave"]);
			// se magic_quotes_gpc è disattivo, mi appoggio a mysql_real_escape_string() contro attacco di tipo SQL Injection
    		 if ( !get_magic_quotes_gpc() ) {
         // e quoto i caratteri \ " ' sensibili per php
    		 $_POST["$chiave"] = mysql_real_escape_string($_POST["$chiave"]);
    	   }
  		}
		}
ti basta invocarla ogni volta che c'è un post di dati da una form, questa funzione si spazzola tutto l'array POST e previene sia l'injection di sql sia di html sia di php (e trimma anche gli spazi e fà anche il caffè...giacchè ci si trova )
__________________
PC DESKTOP B450M-A II Asus * Ryzen 5 3600 (6c/12th) * Rtx 2060 6GB Gigabyte biventola * 32GB Ram 4133Mhz Mushkin Redline RGB ( 2 x 16GB) * Dissipatore a Liquido Corsair H80i v2 * SSD Kingston 240gb * SSD Toshiba 1TB * Alimentatore 550W Sharkoon WPM Gold Zero semi modulare 80+ Gold * Case CoolerMaster N300 finestrato e con usb 3.0 * Windows 11 Pro

SIM RACING Logitech G920 * Logitech D9 * GT Omega Classic

TUTTE LE MIE COMPRAVENDITE!!! (sempre positive!) ed ora in vendita: nulla

Ultima modifica di ckingpin : 05-08-2009 alle 14:44.
ckingpin è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2009, 14:53   #14
bio n3t
Senior Member
 
L'Avatar di bio n3t
 
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
Quote:
Originariamente inviato da ckingpin Guarda i messaggi
ciao, ti passo la funzione che ho creato anni fà per l'esame di php

Codice:
// controlla i valori nell'array $_POST
    function SQL_Injection(){	
  		foreach ($_POST as $chiave => $elemento) {
      // elimino i caratteri _ e % sensibili per le query sql con LIKE
    	$_POST["$chiave"] = str_replace("_", "", $_POST["$chiave"]); 
    	$_POST["$chiave"] = str_replace("%", "", $_POST["$chiave"]);
			//sostituisco le parentesi angolari, onde evitare la creazione di codice html
			$_POST["$chiave"] = str_replace("<", "&lt;", $_POST["$chiave"]);
			$_POST["$chiave"] = str_replace(">", "&gt;", $_POST["$chiave"]);
    	//rimuovo gli spazi all'inizio e alla fine
			$_POST["$chiave"] = trim($_POST["$chiave"]);
			// se magic_quotes_gpc è disattivo, mi appoggio a mysql_real_escape_string() contro attacco di tipo SQL Injection
    		 if ( !get_magic_quotes_gpc() ) {
         // e quoto i caratteri \ " ' sensibili per php
    		 $_POST["$chiave"] = mysql_real_escape_string($_POST["$chiave"]);
    	   }
  		}
		}
ti basta invocarla ogni volta che c'è un post di dati da una form, questa funzione si spazzola tutto l'array POST e previene sia l'injection di sql sia di html sia di php (e trimma anche gli spazi e fà anche il caffè...giacchè ci si trova )
hehehe perfetto mi sei stato utilissimo per capire... soprattutto perchè è molto semplice grazie ai commenti... grazie!!
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:.
TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE!
Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb
bio n3t è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2009, 14:55   #15
ckingpin
Senior Member
 
Iscritto dal: Feb 2008
Messaggi: 1027
Quote:
Originariamente inviato da bio n3t Guarda i messaggi
hehehe perfetto mi sei stato utilissimo per capire... soprattutto perchè è molto semplice grazie ai commenti... grazie!!
all'epoca ero diligente e commentavo tutto (grazie al c.... scrivevo 10 righe di codice al giorno... )
__________________
PC DESKTOP B450M-A II Asus * Ryzen 5 3600 (6c/12th) * Rtx 2060 6GB Gigabyte biventola * 32GB Ram 4133Mhz Mushkin Redline RGB ( 2 x 16GB) * Dissipatore a Liquido Corsair H80i v2 * SSD Kingston 240gb * SSD Toshiba 1TB * Alimentatore 550W Sharkoon WPM Gold Zero semi modulare 80+ Gold * Case CoolerMaster N300 finestrato e con usb 3.0 * Windows 11 Pro

SIM RACING Logitech G920 * Logitech D9 * GT Omega Classic

TUTTE LE MIE COMPRAVENDITE!!! (sempre positive!) ed ora in vendita: nulla
ckingpin è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 11:02   #16
malocchio
Senior Member
 
L'Avatar di malocchio
 
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
Quote:
Originariamente inviato da ckingpin Guarda i messaggi
ciao, ti passo la funzione che ho creato anni fà per l'esame di php

Codice:
// controlla i valori nell'array $_POST
    function SQL_Injection(){	
  		foreach ($_POST as $chiave => $elemento) {
      // elimino i caratteri _ e % sensibili per le query sql con LIKE
    	$_POST["$chiave"] = str_replace("_", "", $_POST["$chiave"]); 
    	$_POST["$chiave"] = str_replace("%", "", $_POST["$chiave"]);
			//sostituisco le parentesi angolari, onde evitare la creazione di codice html
			$_POST["$chiave"] = str_replace("<", "&lt;", $_POST["$chiave"]);
			$_POST["$chiave"] = str_replace(">", "&gt;", $_POST["$chiave"]);
    	//rimuovo gli spazi all'inizio e alla fine
			$_POST["$chiave"] = trim($_POST["$chiave"]);
			// se magic_quotes_gpc è disattivo, mi appoggio a mysql_real_escape_string() contro attacco di tipo SQL Injection
    		 if ( !get_magic_quotes_gpc() ) {
         // e quoto i caratteri \ " ' sensibili per php
    		 $_POST["$chiave"] = mysql_real_escape_string($_POST["$chiave"]);
    	   }
  		}
		}
ti basta invocarla ogni volta che c'è un post di dati da una form, questa funzione si spazzola tutto l'array POST e previene sia l'injection di sql sia di html sia di php (e trimma anche gli spazi e fà anche il caffè...giacchè ci si trova )
Per queste cose molto delicate non ci si può affidare a soluzioni self-made. Non puoi mai sapere che non ti scappi qualche possibile exploit, e comunque devi essere molto preparato nei dettagli.
Secondo me è meglio usare funzioni dedicate specificatamente allo scopo, come la mysql_escape_string().
In PHP io ho utilizzato SEMPRE i prepared statements. Sono comodi e sicuri (non posso dirlo al 100%, però...).

Quote:
Originariamente inviato da ckingpin Guarda i messaggi
all'epoca ero diligente e commentavo tutto (grazie al c.... scrivevo 10 righe di codice al giorno... )
Il 90% dei commenti che vedo in quel codice non ci vanno. Sarai messo alla gogna
__________________
malocchio è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 11:20   #17
bio n3t
Senior Member
 
L'Avatar di bio n3t
 
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
volevo chiedervi un'altra cosa dato che mi sembrate preparatissimi in materia:
avete presente il codice che genera adobe dreamweaver automaticamente se si crea un recordset? ecco... quel codice mi sembra incomprensibile in alcuni punti che vi farò vedere... (cioè solo la parte iniziale dove effettua la connessione (quindi non parlo del ciclo che scrive i dati)). due domande:
1_ vi sembra buono come codice a livello di sicurezza e ottimizzazione? (a parte la query che ho fatto ora: SELECT * FROM tblUtenti)
2_ potreste descrivermi brevemente cosa fa codice? perchè vista così mi crea molta confusione... ve lo riporto qui.
GRAZIE!!

Codice PHP:
<?php require_once('configurazione_connessione.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) { // non capisco
function GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""// non capisco
{
  
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue// non capisco

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); // non capisco

  
switch ($theType) { // non capisco proprio nulla XD
    
case "text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}

// da qui in poi ci arrivo da solo più o meno ;)
mysql_select_db($database_my_bion3t$my_bion3t);
$query_Recordset1 "SELECT * FROM tblUtenti";
$Recordset1 mysql_query($query_Recordset1$my_bion3t) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 mysql_num_rows($Recordset1);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>
</body>
</html>
<?php
mysql_free_result
($Recordset1); // non capisco
?>
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:.
TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE!
Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb
bio n3t è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 11:39   #18
ckingpin
Senior Member
 
Iscritto dal: Feb 2008
Messaggi: 1027
Quote:
Originariamente inviato da malocchio Guarda i messaggi
Per queste cose molto delicate non ci si può affidare a soluzioni self-made. Non puoi mai sapere che non ti scappi qualche possibile exploit, e comunque devi essere molto preparato nei dettagli.
Secondo me è meglio usare funzioni dedicate specificatamente allo scopo, come la mysql_escape_string().
In PHP io ho utilizzato SEMPRE i prepared statements. Sono comodi e sicuri (non posso dirlo al 100%, però...).
infatti c'è la escape string


Quote:
Originariamente inviato da malocchio Guarda i messaggi
Il 90% dei commenti che vedo in quel codice non ci vanno. Sarai messo alla gogna

...vedi che ho fatto bene allora a togliermi il vizio di commentare? quei commenti erano didattici e servivano a far capire al prof che avevo capito......
__________________
PC DESKTOP B450M-A II Asus * Ryzen 5 3600 (6c/12th) * Rtx 2060 6GB Gigabyte biventola * 32GB Ram 4133Mhz Mushkin Redline RGB ( 2 x 16GB) * Dissipatore a Liquido Corsair H80i v2 * SSD Kingston 240gb * SSD Toshiba 1TB * Alimentatore 550W Sharkoon WPM Gold Zero semi modulare 80+ Gold * Case CoolerMaster N300 finestrato e con usb 3.0 * Windows 11 Pro

SIM RACING Logitech G920 * Logitech D9 * GT Omega Classic

TUTTE LE MIE COMPRAVENDITE!!! (sempre positive!) ed ora in vendita: nulla
ckingpin è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 11:42   #19
malocchio
Senior Member
 
L'Avatar di malocchio
 
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
Quote:
Originariamente inviato da bio n3t Guarda i messaggi
volevo chiedervi un'altra cosa dato che mi sembrate preparatissimi in materia:
avete presente il codice che genera adobe dreamweaver automaticamente se si crea un recordset? ecco... quel codice mi sembra incomprensibile in alcuni punti che vi farò vedere... (cioè solo la parte iniziale dove effettua la connessione (quindi non parlo del ciclo che scrive i dati)). due domande:
1_ vi sembra buono come codice a livello di sicurezza e ottimizzazione? (a parte la query che ho fatto ora: SELECT * FROM tblUtenti)
2_ potreste descrivermi brevemente cosa fa codice? perchè vista così mi crea molta confusione... ve lo riporto qui.
GRAZIE!!

Codice PHP:
<?php require_once('configurazione_connessione.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) { // non capisco
function GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""// non capisco
{
  
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue// non capisco

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); // non capisco

  
switch ($theType) { // non capisco proprio nulla XD
    
case "text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}

// da qui in poi ci arrivo da solo più o meno ;)
mysql_select_db($database_my_bion3t$my_bion3t);
$query_Recordset1 "SELECT * FROM tblUtenti";
$Recordset1 mysql_query($query_Recordset1$my_bion3t) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 mysql_num_rows($Recordset1);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>
</body>
</html>
<?php
mysql_free_result
($Recordset1); // non capisco
?>
1) Non ha una vera e propria utilità: significa che non crea la funzione se già è stata creata. Considera che è codice auto-creato.

2) get_magic_quotes_gpc() ritorna true o false in base all'impostazione magic_quotes dell'installazione di php, che è una funzionalità intergrata che si occupa di fare l'escape dei dati specificati negli array $_GET e $_POST.
Qui un bel link: LINK (è deprecata)
Se php fa l'escape di suo, viene eseguita la fuzione stripslashes() che annulla l'escape, altrimenti non fa niente ($theValue = $theValue).

3) $theValue è un dato di cui non conosciamo il tipo (sto parlando di tipi del Php). Tramite $theType si specifica il tipo di $theValue che ci si aspetta di avere e si fa la conversione esplita. Sempre che sia questo il tuo dubbio... conosci il costrutto switch...case vero?

4) mysql_free_result() è una funzione usata per chiudere il recordset e liberare la memoria occupata da esso; questo lo rende inutilizzabile.

Lo so che non mi sono spiegato benissimo e in caso chiedi, come sempre
__________________
malocchio è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 11:44   #20
malocchio
Senior Member
 
L'Avatar di malocchio
 
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
Quote:
Originariamente inviato da ckingpin Guarda i messaggi
infatti c'è la escape string





...vedi che ho fatto bene allora a togliermi il vizio di commentare? quei commenti erano didattici e servivano a far capire al prof che avevo capito......
Ah sì scusa, ho letto le prime righe e mi sono prevenuto, come sempre

maledetti prof
__________________
malocchio è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI Mic Mini 2: audio 48 kHz / 24-bit e protocollo OsmoAudio sotto i 100 Euro DJI Mic Mini 2: audio 48 kHz / 24-bit e protocol...
Recensione Moto G77: display AMOLED e buona autonomia per il midrange economico Recensione Moto G77: display AMOLED e buona auto...
DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla DJI Lito 1 e Lito X1 recensione: i nuovi droni p...
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi Sony World Photography Awards 2026: i premiati, ...
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince Una settimana con Hyundai Ioniq 5 N-Line: divert...
Arlo, nuove offerte sulle telecamere di ...
Google Gemini attiva la Memoria in Itali...
Da VMware a Proxmox, come AXOL ha suppor...
Meta nei guai con l'UE: perché Facebook ...
Blender ha un nuovo sponsor da €240.000 ...
Il Philips Bodygroom Serie 7000 a 64€ (e...
Valanga di novità da Fanatec, anche per ...
'DLSS' e 'Fram Gen' anche per il Samsung...
Claude si integra con Blender e Adobe: n...
Agente AI cancella l'intero database di ...
Il ritorno del Commodore 64: il nuovo C6...
Google Gemini entra nei sistemi classifi...
Nuovi MacBook Pro 14,2" con chip M5...
Configuratore Corsair FRAME, il punto di...
I giochi digitali su PS4 e PS5 hanno un ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:10.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v