Italian Mysql su Aruba

micro

Well-Known Member
Licensed User
Longtime User
Ma quelle barre \'xxxx...\' ?

Non dovresti passare: VALUES (Null, "xxx", "PALLINO",..
Infatti Luca io non le passo, è quando mi ritorna l'echo del php che mi mostra stranamente gli slashes
 

micro

Well-Known Member
Licensed User
Longtime User
Perfetto, Grazie a tutti ragazzi.
Adesso viene il bello su come gestire le pagine html con ricerche e quant'altro.
Ancora grazie!!!!!
 

LucaMs

Expert
Licensed User
Longtime User
Il problema sono proprio le barre, non dovrebbero essere inviate !!

Ci sono quindi due soluzioni
1) trovi il sistema che le barre non vengano inviate
2) modifichi EXECUTE.PHP in modo che tolga le barre cioè dopo la riga
include('config.php');
aggiungi la riga:
$sql = stripslashes($sql);

Sergio


Ero sveglio come un... ghiro. Tanto che non mi veniva nemmeno il nome del carattere (back-slash e slash).
Poche ore prima avevo consigliato di usarlo per evitare problemi del "." (punto) in una Regex :D

Inizia la vecchiaia, sigh (speriamo finisca presto... e torni la giovinezza :p)
 

valentino s

Active Member
Licensed User
Longtime User
Bel thread.

Aggiungo i miei due cents:
B4X:
$sql = '';if (isset($_GET['sql'])) $sql = $_GET['sql'];
$chk = '';if (isset($_GET['chk'])) $chk = $_GET['chk'];

Ho visto che non ci sono filtri su quello che viene passato dal web: solo la password che naturalmente e' bene :)

Suggerirei tre step:

1) in mysql usare password diverse tra select e tutte le altre operazioni di scrittura
2) in php non passare ($_GET) tutto il comando sql ma solo le parole da cercare o i dati da scrivere, magari anche con diversi script php.
3) in php creare il comando sql completo, non dall'app. Piu' sicuro e piu' facile l'eventuale aggiornamento.

Il vantaggio e' che il php puo' effettuare meglio i controlli di quello che viene passato e complicare un po' di piu' la vita a chi vuole entrare.

bye
 

Luciano Veneziano

Active Member
Licensed User
Longtime User
Io utilizzo una via alternativa già testata e online
puoi chiamare una pagina php, per la lettura, che restituisce la query in XML o in JSON.
per la scrittura richiami una pagina upd.php?id=11&field=pluto&value=pappappero
a quel punto puoi tutto.
 

Luciano Veneziano

Active Member
Licensed User
Longtime User
Questa è una query, restituisce un file xml che è utilizzabile da qualsiasi applicazione

B4X:
<?php
require("app.lib.php");

$host ="localhost";
$usr = "pippo";
$pwd ="pippozzot";

$sql = @$_GET["q"];
$sql = urldecode($sql);
$res = "Errore di connessione ($sql)";
if(!empty($sql)) {
  $res = XmlToCds($host,$usr,$pwd,$sql);
}
echo $res;
?>
 

valentino s

Active Member
Licensed User
Longtime User
Ciao Luciano, grazie, utile ricordare xml o json.

Mi piace molto l'idea di upd.php?id=11&field=pluto&value=pappappero

Il secondo esempio invece potenzialmente ti espone all'esecuzione di qualsiasi query.

Io cambierei la generazione dell'$sql in questo modo:

B4X:
$campi="id, nome, cap"; oppure $campi=stripslashes($_REQUEST["campi"]);
$sql = "select ".$campi." from tabella where ".urldecode($sql). " limit 0,10";
$sql = str_replace(";","stop_aliens:)",$sql);

Io sono piu' paranoico, ma almeno fermerei il ; usato di solito per aggiungere una seconda query del tipo 1=1

Comunque il secondo esempio puo' essere eseguito da chiunque anche senza app. Non c'e' nessuna password a impedirlo.

E comunque agglungerei sempre un limit, senza delegarlo all'app per evitare query troppo pesanti (ddos)
 

micro

Well-Known Member
Licensed User
Longtime User
Rieccomi ragazzi, ho messo una pagina html che mi richiama una tableviewer per vedere il database e fin qui tutto ok.
Avendo già il file connect.php che fa da ponte per le query con il mio programma in B4j volevo fare in modo che direttamente dal sito con un button
potessi cancellare la table interessata.
questo è il codice:
B4X:
<H1 Align=Center>Cancellazione DB</H1>
<HR SIZE=1 WIDTH=90%>

<input type="button" value="Cancella" id="btnCancdb" />

<script type="text/javascript">
document.getElementById("btnCancdb").onclick = function()
{
var result = confirm("Vuoi veramente cancellare il Db?");
if (result == true) {
    var urlc = "http://xxxxxxxxxx/execute.php?chk=``&sql=$sql = TRUNCATE TABLE `Registrazioni`";
     document.write(src=urlc);
} 
}
</script>
Il problema è che non va e presumo sia sbagliata la creazione di urlc.
Non sono esperto di php e javascript e quindi arranco e poi come dice luca è anche una questione di età :D
Grazie
 

Luciano Veneziano

Active Member
Licensed User
Longtime User
... ma i diritti ce li hai? prima prova a cancellarlo con l'utenza associata al file execute.php.
se funziona è il php che non va.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Non sono espertissimo di javascript ma...
B4X:
document.write (src=urlc);
ma cos'è sta roba ???
 

micro

Well-Known Member
Licensed User
Longtime User
Non sono espertissimo di javascript ma...
B4X:
document.write (src=urlc);
ma cos'è sta roba ???
Bhè sirj066 nenanche io sono un esperto e cerco di comprendere leggendo qualcosa su un mio vecchio libro di javascript, ma non sempre riesco nell'intento :)
src è un attributo che specifica l'URL ed document.write è un metodo che manda in uscita una stringa direttamente in una pagina.
Almeno così ho interpretato, ma probabilmente non è proprio così.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
secondo me il problema è proprio su quella riga, dove la hai trovata ??

Per prima cosa proverei a fare un link diretto, senza per ora usare JavaScript, ad esempio:
B4X:
<a href="http://xxxxxxxxxx/execute.php?&sql=TRUNCATE TABLE Registrazioni">Cancella Registrazioni</a>
Questo non ti chiede conferma, ma almeno capisci se funziona, e poi si procede con un passo alla volta.
Comunque hai anche un altro errore e cioè nel link ti è scappato un "$sql=" che è in più

Prova con il codice che ti ho dato e dimmi cosa appare a video

Sergio
 

micro

Well-Known Member
Licensed User
Longtime User
Si sirjo66 ho commesso un errore nella stringa e così come da te suggerito in html puro funziona.
Comunque funziona anche in javascript con location.href=......
Grazie a tutti.
 

micro

Well-Known Member
Licensed User
Longtime User
Potrebbe essere OT ma è sempre inerente comunque al PHP e alla connessione mysql

Da B4j faccio
dim s as string = su.EncodeBase64(conv.StringToBytes(query, "UTF8"))

in PHP
la funzione
$s = base64_decode($sql);
non mi ritorna la query iniziale ma caratteri strani

Dove sbaglio?
 
Top