Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
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 5900X @ 4,7Ghz + Thermalright Phantom Spirit 120 SE / MB Asus X470-F Gaming / RAM 2x16GB DDR4 Corsair 3600 CL16 / VGA Sapphire RX 7900 XT Nitro+ / SSD Crucial T500 1TB + Samsung 970 Pro 512GB + Sandisk 960GB Ultra II / PSU FSP Hydro G PRO 1000W / 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


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Google potrebbe rilasciare un'app uffici...
Lies of P, il sequel potrebbe chiamarsi ...
Dreamforce 2026: Salesforce punta sulla ...
SpaceX ha confermato che Flight 14 sar&a...
Googlebook pronto al debutto: Google apr...
Guida all'acquisto: quale lavapavimenti ...
Google Maps su Android Auto introduce fi...
AMD Ryzen 5 5500F: fino al 16% di presta...
L'ecosistema partner di Microsoft cresce...
Oracle registra un boom nella divisione ...
Amazon Prime Video sfida TikTok con le n...
L'uscita di Rayman Legends Retold &egrav...
Dazio UE sui pacchi extra UE, in Italia ...
La nuova lavatrice smart di Xiaomi ha tr...
Hai una PSP nel cassetto? Questo nuovo p...
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: 07:15.


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