Perbaiki injeksi SQL itu
$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!.
Perhatikan bahwa menyimpan kata sandi yang tidak terenkripsi dalam database adalah dosa besar.
Lihat di bawah tentang cara memperbaikinya.
Pemicu tidak mengizinkan parameter
Anda hanya dapat mengakses nilai yang baru saja Anda sisipkan ke dalam tabel.
Pemicu Sisipkan memiliki tabel tiruan new
untuk ini.
Pemicu Hapus memiliki tabel tiruan old
untuk melihat nilai yang akan dihapus.
Pemicu Pembaruan memiliki old
dan new
.
Selain itu, Anda tidak dapat mengakses data luar apa pun.
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$$
Solusinya
Buat tabel lubang hitam.
Tabel lubang hitam untuk tidak menyimpan apa pun, satu-satunya alasan keberadaannya adalah untuk tujuan replikasi sehingga Anda dapat melampirkan pemicu padanya.
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;
Selanjutnya masukkan data ke dalam tabel blackhole dan proses menggunakan 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$$
Catatan tentang pemicu
Anda tidak boleh menyimpan kata sandi dengan jelas dalam database.
Selalu simpan sebagai hash asin menggunakan fungsi hash paling aman (saat ini SHA2 dengan panjang kunci 512) , seperti yang ditunjukkan pada pemicu.
Anda dapat menguji untuk melihat apakah seseorang memiliki sandi yang benar dengan melakukan:
SELECT * FROM user
WHERE username = '$username' AND passhash = SHA2(CONCAT(salt,'$password'),512)
Tautan
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
Menyimpan sandi hash di MySQL
Bagaimana cara injeksi SQL dari "Bobby Tables" Komik XKCD?