Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    SQL Injection, làm thế nào để bết tên database, tên column?


  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Muốn biết tên table thì dựa vào thông báo lỗi, muốn biết tên cột thì liệt kê nó ra thôi. Nếu database có mức độ bảo mật không cao, thì cả tên table cũng có thể liệt kê ra.

    Có bao nhiêu cách phá hoại, kể tên ah? Câu hỏi này Kevin nhường cho các cao nhân trả lời bạn!

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    thanks Kevin Hoang
    cho mình hỏi thêm:
    csdl sao mới gọi là bảo mật cao?
    làm sao mới liệt kê tên cột được?

    trên form web mình ko để lộ ra cái tên cột nào hết, vậy họ có thể tìm ra tên cột ko?
    về việc lỗi thì nếu sử lý trong sql thì còn có thể dựa vào lỗi mà biết được tên table nửa không?

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    có url: http:\\abc.com?msv=1
    ví dụ có câu truy vấn sau:
    Mã:
    delete from sinhvien where masv='"+Request.Querystring["msv"]+"';
    Nếu với câu lệnh sql trên. Hacker biết được bạn không sử lí gì cái querystring msv trên thì bạn toi rồi. nó chỉ cần thêm vài lệnh sql đằng sau cái query trên là ứng dụng của bạn sẽ ra đi.
    http:\\abc.com?msv=1' or 1=1 (1=1 luôn đúng)
    ghép lại:
    Mã:
    delete from sinhvien where masv='1' or 1=1
    -> ra đi cả bảng sinh viên còn gì nữa.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    cám ơn các pro quan tâm đến bài này.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    SQL Injection thường chỉ xảy ra với nhưng ngưới mới lập trình thôi.
    Họ hay lợi dung các Query String giống như dưới đây chằng hạn và thêm nữa là các escaped character và comments của SQL Query
    http://forums.congdongcviet.comewr...ote=1&p=226164
    Ví dụ bạn viết code C# như sau

    String A = "Select * FROM TABLEX where [Col1] = ' " + Col1Value + " ' " AND [COL2] = ' ABCD ' ;

    Nếu như bạn không xử lý Col1Value kỹ thì họ có thể sửa lại SQL String
    Họ sẽ sửa Col1Value như sau : X'; Attack ngay tại chỗ này, viết gì cũng được --
    Như vậy String A sẽ là

    Select * FROM TABLEX where [Col1] = 'X'; Attack SQL --' AND [COL2] = ' ABCD '

    Như vậy cái đoạn Select * FROM TABLEX where [Col1] = 'X'; vẫn được execute + thêm cái đoạn Attack SQL , còn cái phần sau dấu -- sẽ bị bỏ qua vì SQL Engine nghĩ đó là Comments

    Cách phòng tránh thì bạn dùng SQL Parameters


    String A = "Select * FROM TABLEX where [Col1] = @Name1 AND [Col2] = 'ABCD'"
    như vậy SQL parameter là
    SqlParameter X = new SqlParameter("@Name1", Col1Value);
    rồi add nó vô SQLCommand, cho execute
    Tránh dùng String Concatenation

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •