Kali ini saya akan memposting cara menyimpan gambar di BLOB mysql yg masih jarang digunakan. Berikut adalah contoh code program menggunakan VB.NET
Step 1 : buat Database dulu di mysql
CREATE TABLE `test`.`users` (
`USERID` varchar(20) NOT NULL default '0',
`USERNAME` varchar(45) NOT NULL default '',
`USEREMAIL` varchar(45) NOT NULL default '',
`USERPHOTO` mediumblob NOT NULL,
`USERDESC` varchar(200) NOT NULL default '',
PRIMARY KEY (`USERID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Step 2 : Buat Desain Program di VB.NET
Step 3 : Ketikkan code di bawah ini di VB.NET
Imports System.IO
Imports System.Data.OleDb
Imports MySql.Data.MySqlClient
Private curImage As Image = Nothing
Private curFileName As String = Nothing
Private connstring As String = "server=localhost;database=test;uid=root;pwd=root123"
Private savedImageName As String = "C:\\xxx.jpg"
Private Sub btncari_Click()
Dim openDlg As OpenFileDialog = New OpenFileDialog
openDlg.Filter = "All JPEG files|*.jpg"
Dim filter As String = openDlg.Filter
openDlg.Title = "Open a JPEG File"
If (openDlg.ShowDialog() = DialogResult.OK) Then
curFileName = openDlg.FileName
TextBox1.Text = curFileName
End If
End Sub
Private Sub btnsimpan_Click()
If TextBox1.Text Is String.Empty Then
MessageBox.Show("Mencari File Gambar")
Return
End If
Dim fs As FileStream = New FileStream(curFileName, FileMode.OpenOrCreate, FileAccess.Read)
Dim rawData() As Byte = New Byte(fs.Length) {}
fs.Read(rawData, 0, System.Convert.ToInt32(fs.Length))
fs.Close()
Dim sql As String = "SELECT * FROM Users"
Dim conx As MySqlConnection = New MySqlConnection
conx.ConnectionString = connstring
If conx.State <> ConnectionState.Open Then
conx.Open()
End If
Dim adapterx As MySqlDataAdapter = New MySqlDataAdapter(sql, conx)
Dim cmdBuilderx As MySqlCommandBuilder = New MySqlCommandBuilder(adapterx)
Dim ds As DataSet = New DataSet("Users")
adapterx.MissingSchemaAction = MissingSchemaAction.AddWithKey
adapterx.Fill(ds, "Users")
Dim userDes As String = "toekangprogrammer.blogspot.com"
Dim row As DataRow = ds.Tables("Users").NewRow()
row("Userid") = "userx"
row("UserName") = "toekangprogrammer"
row("UserEmail") = "toekangprogrammer@gmail.com"
row("UserDesc") = userDes
row("UserPhoto") = rawData
ds.Tables("Users").Rows.Add(row)
adapterx.Update(ds, "Users")
If conx Is Nothing Then
If conx.State = ConnectionState.Open Then
conx.Close()
End If
conx.Dispose()
End If
MessageBox.Show("Data Tersimpan")
End Sub
Private Sub btnread_Click()
Dim sql As String = "SELECT UserPhoto FROM Users where userid='Userx'"
Dim conx As MySqlConnection = New MySqlConnection
conx.ConnectionString = connstring
If conx.State <> ConnectionState.Open Then
conx.Open()
End If
Dim cmd As MySqlCommand = New MySqlCommand(sql, conx)
Dim fs As FileStream
Dim bw As BinaryWriter
Dim bufferSize As Integer = 300000
Dim outbyte(300000 - 1) As Byte
Dim retval As Long
Dim startIndex As Long = 0
Dim pub_id As String = ""
Dim reader As MySqlDataReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)
reader.Read()
fs = New FileStream(savedImageName, FileMode.OpenOrCreate, FileAccess.Write)
bw = New BinaryWriter(fs)
startIndex = 0
retval = reader.GetBytes(0, 0, outbyte, 0, bufferSize)
bw.Write(outbyte)
bw.Flush()
bw.Close()
fs.Close()
reader.Close()
curImage = Image.FromFile(savedImageName)
PictureBox1.Image = curImage
PictureBox1.Invalidate()
If conx.State = ConnectionState.Open Then
conx.Close()
conx.Dispose()
End If
End Sub
Step 4 : Selesai sudah tinggal compile dan tekan F5
Semoga bisa membantu.
Jika ada pertanyaan/diskusi tentang masalah program VB.Net bisa email ke : toekangprogrammer@gmail.com
Para pengguna internet yang memiliki rekening bank, kartu kredit, atau mereka yang menyimpan informasi pribadi di akun online kebanyakan mengguanakan kata kunci yang lemah sehingga peretas dapat mengetahui sandi tersebut. Para hacker biasanya menggunakan Graphics cards kemudian dikombinasikan dengan software atau program untuk memecahkan sandi dan berulang kali mencoba kombinasi password yang berbeda-beda sampai ditemukan sandi yang benar.
Menurut penelitian tersebut, para pengguna internet biasanya membuat password yang berisi infomasi pribadi mereka, seperti tanggal lahir, kota asal, nama orang tua, nama pacar dan sebagainya.
Jamie Cowper dari Symantec memberikan saran supaya para penggiat internet menggunakan password yang berbeda-beda untuk berbagai akun yang mereka miliki. "Dan jangan lupa untuk mengubah password secara berkala," katanya.
Selain itu, pengguna juga disarankan membuat kata kunci yang terdiri dari 12 karakter supaya tidak mudah diketahui. "Membuat password pendek berisiko untuk dibobol," katanya. Kata kunci pendek yang dimaksud Cowper adalah sandi yang terdiri dari tujuh karakter atau kurang.
Cowper yang bekerja pada perusahaan yang memproduksi perangkat lunak keamanan internet seperti Norton Anti-Virus, ini juga menyarankan pengguna untuk membuat kombinasi karakter password yang terdiri dari termasuk nomor dan huruf besar atau kecil.
SQL Injection adalah salah satu jenis penyerangan yang mengijinkan user tidak sah(penyerang)untuk mengakses database server. Pada dasarnya,serangan ini difasilitasi oleh kode program anda sendiri.
teknik nya,penyerang mencoba memasukkan query (melalui field atau URL) yang akan menyebabkan database server men-generate query SQL yang tidak valid.
Pada kenyataan nya,SQL injection terbukti merupakan salah satu teknik terbaik yang sering
melumpuhkan sasarannya. Begitu penyerang berhasil menguasai kendali dataase server,ia bisa
melakukan apa saja,seperti memodifikasi atau bahkan menghapus semua data yang ada. bagaimana pun juga ,
ini bisa dicegah jika kode program anda melakukan validasi yang baik.
Sebenarnya apa bila anda teliti,teknik SQL injection sangat sederhana sekali. Akan tetapi
justru yang sering diabaikan oleh para programer,entah itu tidak tahu atau lupa.
Berikut ini beberapa contoh teknik SQL injection,implementasi,dan cara menggagalkan nya.
Single SQL Injection
walaupun penyerang awalnya mencoba memasukan query berupa pernyataan SQL,akan tetapi bukan
sembarang query. Dalam hal ini,penyerang cukup memiliki pengatahuan mengenai SQL,sebagai
contoh permulaan (maklumlah saya masih newbie :P) anda memiliki kode seperti ini.
$match = false;
if (isset($_POST['submit'])) {
$nama = $_POST['nama'];
$pass = $_POST['pass'];
$sql = "SELECT nama, password FROM user WHERE
nama='$nama' AND password='$pass'";
$res = mysqli_query($db, $sql);
// jika res berhasil,dan row yang
// dikembalikan=1, set $match=true
if ($res && mysqli_query_rows($res) == 1) {
$match = true ;
mysqli_free_result($res);
}
if ($match === true) {
echo 'account match';
} else {
echo 'invalid account';
}
}
kode program diatas memang kelihatan melakukan verifikasi data, tetapi sebenarnya sangat
rapuh,penyerang bisa menggnakan query-query seperti dibawah ini,untuk melakukan akses
secara tidak sah
// mengisi field nama saja,# adalah komentar,
// yang akan mengabaikan baris setelahnya
admin'#
// mengisi nama field saja
// mengekstrak data kelokasi tertentu
'OR' 1=1 INTO DUMPFILE '/path/ke_lokasi/file.txt '#
'OR' 1=1 INTO OUTFILE '/path/ke_lokasi/file.txt '#
Bagaimapun juga,contoh contoh SQL injection diatas adalah contoh yang umum. Adapun untuk
mencegah nya menggunakan fungsi mysql_real_escape_string () atau addslashes(), seperti
yang diuraikan pada fungsi myMacig()sebelumnya
$nama = myMacig($_POST['nama']};
$pass = myMacig($_POST['pass']};
Multiple SQL injection
Contoh SQL injection lainnya adalah dengan memberikan multiple query,seperti berikut:
// $id dari method GET/POST
$sql = "SELECT * FROM buku WHERE kode='{$id}’ “;
//mengahapus isi table
0; DELETE FROM user
// membuat account baru
0; GRANT ALL ON *.* TO 'xxx@%'
Dalam kasus ini,macig quote akan mengabaikan tanda titik koma,ini sangat membahayakan
jika menggunakan SQLite atau postgreSQL. Adapun solusi nya adalah menggunakan operator
casting untuk memastikan bahwa id harus integer.
//Simulasi nilai $_POST['id']
0; DELETE FROM user
$id = (int) myMacig($_POST['id']);
apabila anda ingin memeriksa apakah input mengandung karakter tertentu,gunakan fungsi strpos().
$nama = myMacig ($_POST ['id']);
// periksa apakah karakter ; terdapat
// di variabel $nama.
if (strpos($nama, ';' die ('Naughty Naughty,
Very Naughty...');