Correggi l'iniezione SQL
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$sql = "INSERT INTO table1 VALUES ('username','password');
// You must quote your $vars ^ ^ ^ ^ like this
// or syntax errors will occur and the escaping will not work!.
Tieni presente che l'archiviazione di password non crittografate in un database è un peccato capitale.
Vedi di seguito come risolverlo.
I trigger non consentono parametri
Puoi accedere solo ai valori che hai appena inserito nella tabella.
Il trigger Inserisci ha una tabella fittizia new
per questo.
Il trigger Elimina ha una tabella fittizia old
per vedere i valori che devono essere eliminati.
Il trigger di aggiornamento ha entrambi old
e new
.
A parte questo, non puoi accedere a nessun dato esterno.
DELIMITER $$
//Creates trigger to insert into table1 ( logs ) the userid and patientid ( which has to come from php )
CREATE
TRIGGER ai_table1_each AFTER INSERT ON `baemer_emr`.`table1`
FOR EACH ROW
BEGIN
INSERT INTO table2 VALUES (NEW.idn, NEW.username, NEW.patientid);
END$$
La soluzione
Crea una tabella blackhole.
Le tabelle blackhole non memorizzano nulla, il loro unico motivo per esistere è per scopi di replica e quindi puoi allegare loro trigger.
CREATE TABLE bh_newusers (
username varchar(255) not null,
password varchar(255) not null,
idn integer not null,
patient_id integer not null,
user_id integer not null) ENGINE = BLACKHOLE;
Quindi inserisci i dati nella tabella dei buchi neri ed elaborali usando un trigger.
CREATE
TRIGGER ai_bh_newuser_each AFTER INSERT ON `baemer_emr`.bh_newuser
FOR EACH ROW
BEGIN
DECLARE newsalt INTEGER;
SET newsalt = FLOOR(RAND()*999999);
INSERT INTO users (username, salt, passhash)
VALUES (NEW.username, newsalt, SHA2(CONCAT(newsalt, password), 512));
INSERT INTO table2 VALUES (NEW.idn, NEW.username, NEW.patient_id);
END$$
Note sul trigger
Non dovresti mai memorizzare le password in chiaro in un database.
Memorizzale sempre come hash salato utilizzando la funzione hash più sicura (attualmente SHA2 con una lunghezza della chiave 512) , come mostrato nel trigger.
Puoi verificare se qualcuno ha la password corretta eseguendo:
SELECT * FROM user
WHERE username = '$username' AND passhash = SHA2(CONCAT(salt,'$password'),512)
Link
http://dev.mysql .com/doc/refman/5.0/en/blackhole-storage-engine.html
http://dev.mysql.com /doc/refman/5.0/en/create-trigger.html
Memorizzazione delle password con hash in MySQL
Come funziona l'SQL injection dalle "Bobby Tables" I fumetti di XKCD?