Minggu, 08 Januari 2012

Slow Read, Gaya Santai Tumbangkan Website

Jakarta - Biasanya, cara yang paling sering digunakan hacker untuk melumpuhkan sebuah situs adalah menyerang dengan modus Distributed Denial of Service (DDoS). Tapi kini ditemukan cara baru yang lebih santai, tapi mematikan.

Metode DDos umumnya menggunakan beberapa komputer yang secara terus menerus mengirim permintaan ke server, jumlah request yang besar dan bertubi-tubi ini perlahan tapi pasti bisa menumbangkan sebuah situs. Cara ini juga sering digunakan oleh grup peretas Anonymous.

Nah, kini ada cara yang ditemukan oleh Sergey Shekyan, kepala riset lembaga keamanan Qualsys. Ia berhasil membuat sebuah tool yang memungkinkan melakukan DDoS hanya melalui satu komputer saja.

Aplikasi tersebut bernama Slow Read. Cara kerjanya mirip dengan DDos pada umumnya, hanya saja data yang diberikan oleh server dibaca dengan amat perlahan. Konon, aksi ini memanfaatkan celah pada Transmission Control Protocol (TCP) yang memungkinkan peretas untuk memanipulasi alur data.

Dikutip detikINET dari arstechnica, Sabtu (7/1/2012), aplikasi ini merupakan penyempurnaan dari versi sebelumnya yakni slowhttptest tool. Program yang pernah digunakan untuk mengacaukan server pemerintah Iran pada 2009 lalu.

Kamis, 08 Desember 2011

Menyimpan dan Menampilkan gambar dalam tabel dengan Java

Kita dapat menyimpan berkas gambar kedalam tabel dengan kolom bertipe BLOB begitupun sebaliknya. Yaitu menampilkan data BLOB menjadi gambar. Hal ini dibutuhkan dalam pembuatan kartu identitas yang datanya diambil dari data pegawai misalnya. Sebagai percobaan, pertama-tama kita sediakan sebuah database (MySQL) yang kita berinama “testdb” dan berisi sebuah tabel yang bernama “datapegawai”.
mysql> create database testdb;
Query OK, 1 row affected (0.00 sec)

mysql> use testdb;
Database changed

mysql> create table datapegawai (id int primary key auto_increment, nama varchar(200) not null, pasphoto blob);
Query OK, 0 rows affected (0.07 sec)

mysql> desc datapegawai;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| nama     | varchar(200) | NO   |     | NULL    |                |
| pasphoto | blob         | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
Setelah database dan tabelnya sudah siap, saatnya mengetikan kode program. Inilah contoh sederhananya…
$ vim Main.java
public class Main {
  public static void main(String[] args) {
    Jendela j=new Jendela();
    j.setVisible(true);
  }
}
$ vim Jendela.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import com.mysql.jdbc.Blob;
import com.mysql.jdbc.PreparedStatement;
import java.util.logging.*;
import java.io.*;

public class Jendela extends JFrame {
  private JButton btnSimpan;
  private JButton btnTampilkan;
  private JLabel photo;

  private Connection con = null;
  private Statement st = null;
  private String url = "jdbc:mysql://localhost:3306/testdb";
  private String user = "usermysqlanda";
  private String pass = "passwordanda";

  int iLength;
  ImageIcon ii;
  Blob pic;

  public Jendela() {
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      try{
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        con = DriverManager.getConnection(url,user,pass);
        st= con.createStatement();
      } catch(Exception ex) {
        ex.printStackTrace();
      }

      btnSimpan=new JButton("Simpan");
      btnTampilkan=new JButton("Tampilkan");
      photo=new JLabel();

      btnSimpan.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
          onSimpan(evt);
        }
      });

      btnTampilkan.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
          onTampilkan(evt);
        }
      });

      JPanel panel=new JPanel();
      panel.add(btnSimpan);
      panel.add(btnTampilkan);

      getContentPane().setLayout (new GridLayout ());
      getContentPane().add(panel);
      getContentPane().add(photo);

      pack();
  }

   private void onSimpan(ActionEvent evt) {
     File file = new File("/home/wirasto/images.jpg");
      FileInputStream fileInputStream = null;
      try {
        fileInputStream = new FileInputStream(file);
      } catch (FileNotFoundException ex) {
        Logger.getLogger(Jendela.class.getName()).log(Level.SEVERE, null, ex);
      }
      PreparedStatement ps=null;
      try {
        ps = (PreparedStatement) con.prepareStatement("insert into datapegawai(nama, pasphoto) values (?, ?)");
        ps.setString(1, "luna");
        ps.setBinaryStream(2, fileInputStream, (int) file.length());
        ps.executeUpdate();
      } catch (SQLException ex) {
        Logger.getLogger(Jendela.class.getName()).log(Level.SEVERE, null, ex);
      }
   }

   private void onTampilkan(ActionEvent evt) {
     PreparedStatement ps=null;
    try {
      ps = (PreparedStatement) con.prepareStatement("select pasphoto from datapegawai where nama=?");
      ps.setString(1, "luna");
      ResultSet rs =  ps.executeQuery();
      rs.next();

      pic=(Blob) rs.getBlob(1);
      iLength = (int)(pic.length());
      ii = new ImageIcon(pic.getBytes( 1, iLength ));
      photo.setIcon(ii);
    } catch (SQLException ex) {
      Logger.getLogger(Jendela.class.getName()).log(Level.SEVERE, null, ex);
    }
   }
}
Setelah itu compile dan jalankan. Untuk lokasi mysql connector, silahkan disesuaikan saja.
$ javac -classpath "mysql-connector-java-5.1.6-bin.jar" Main.java Jendela.java
$ java -classpath "mysql-connector-java-5.1.6-bin.jar:" Main
Hasilnya

Tampilan yang indah memang bukan sasaran dari kode diatas. Silahkan kembangkan dan sesuaikan dengan kebutuhan Anda. Misalnya gambar yang namanya didapat lewat JFileChooser, bukan ditentukan langsung seperti contoh yang saya berikan.
Selamat mencoba