Báo Cáo Phòng chống tấn công sql injection bằng isa 2006 trên window server

Thảo luận trong 'Công Nghệ Thông Tin' bắt đầu bởi Bích Tuyền Dương, 9/4/13.

  1. Bích Tuyền Dương

    Bài viết:
    2,590
    Được thích:
    0
    Điểm thành tích:
    0
    Xu:
    0Xu
    TẤN CÔNG SQL VÀ CÁC HẬU QUẢ CỦA TẤN CÔNG SQL
    1.1: Thế nào là sql ?
    Định nghĩa: SQL (Structured Query Language - ngôn ngữ truy vấn mang tính cấu trúc) là một loại ngôn ngữ máy tính phổ biến để tạo, sửa, và lấy dữ liệu từ một hệ quản trị cơ sở dữ liệu quan hệ. Ngôn ngữ này phát triển vượt xa so với mục đích ban đầu là để phục vụ các hệ quản trị cơ sở dữ liệu đối tượng-quan hệ. Nó là một tiêu chuẩn ANSI/ISO.sql được sử dụng để
    Các hàm sql cơ bản :select,delete,update,insert

    Hình 1.1 Hàm select trong hệ quản trị cơ sở dữ liệu mysql
    1.2 tấn công sql
    Tấn công sql là kiểu tấn công vào cơ sở dữ liệu của trang web nhằm lấy các thông tin bí mật của cá nhân hay tổ chức nào đó 1 cách trái phép bằng cách sử dụng các lỗ hổng bảo mật sql

    Hình 1.2: Mô hình tấn công sql sử dụng phép OR trong sql injection
    1.3 Các dạng lỗi thường gặp để tấn công sql
    1.3.1 Không kiểm tra ký tự thoát truy vấn:
    Đây là dạng lỗi SQL injection xảy ra khi thiếu đoạn mã kiểm tra dữ liệu đầu vào trong câu truy vấn SQL. Kết quả là người dùng cuối có thể thực hiện một số truy vấn không mong muốn đối với cơ sở dữ liệu của ứng dụng. Dòng mã sau sẽ minh họa lỗi này:
    statement = "SELECT * FROM users WHERE name = '" + userName + "';"
    Câu lệnh này được thiết kế để trả về các bản ghi tên người dùng cụ thể từ bảng những người dùng. Tuy nhiên, nếu biến "userName" được nhập chính xác theo một cách nào đó bởi người dùng ác ý, nó có thể trở thành một câu truy vấn SQL với mục đích khác hẳn so với mong muốn của tác giả đoạn mã trên. Ví dụ, ta nhập vào giá trị của biến “username” như sau:
    a' or 't'='t
    Khiến câu truy vấn có thể được hiểu như sau:
    SELECT * FROM users WHERE name = 'a' OR 't'='t';
    Nếu đoạn mã trên được sử dụng trong một thủ tục xác thực thì ví dụ trên có thể được sử dụng để bắt buộc lựa chọn một tên người dùng hợp lệ bởi 't'='t' luôn đúng. Trong khi hầu hết các SQL server cho phép thực hiện nhiều truy vấn cùng lúc chỉ với một lần gọi, tuy nhiên một số SQL API như mysql_query của php lại không cho phép điều đó vì lý do bảo mật. Điều này chỉ ngăn cản tin tặc tấn công bằng cách sử dụng các câu lệnh riêng rẽ mà không ngăn cản tin tặc thay đổi các từ trong cú pháp truy vấn. Các giá trị của biến "userName" trong câu truy vấn dưới đây sẽ gây ra việc xoá những người dùng từ bảng người dùng cũng tương tự như việc xóa tất cả các dữ liệu được từ bảng dữ liệu (về bản chất là tiết lộ các thông tin của mọi người dùng), ví dụ này minh họa bằng một API cho phép thực hiện nhiều truy vấn cùng lúc:
    a';DROP TABLE users; SELECT * FROM data WHERE 't' = 't
    Điều này đưa tới cú pháp cuối cùng của câu truy vấn trên như sau:
    SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM DATA WHERE 't' = 't';
     

    Các file đính kèm:

Đang tải...