CHƯƠNG 1: TỔNG QUAN VỀ SQL INJECTION 1.1 Các khái niệm cơ bản 1.1 Truy vấn SQL là gì SQL (Structured Query Language) hay 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ơ sY 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ơ sY dữ liệu đối tượng-quan hệ. Nó là một tiêu chuẩn ANSI/ISO. SQL cũng là ngôn ngữ tiêu chuẩn cho các hệ cơ sY dữ liệu quan hệ.
Tất cả các hệ thống quản trị cơ sY dữ liệu (RDBMS) như MySQL, MS Access, Oracle, Sybase, Informix, Postgres hay SQL Server đều lấy SQL làm ngôn ngữ cơ sY dữ liệu tiêu chuẩn.[4] Trong mô hình client/server, toàn bộ CSDL được tập trung lưu trữ trên máy chủ (Server), mọi thao tác xử lý dữ liệu được thực hiện trên máy chủ bằng các lệnh SQL. Máy trạm (Client) chỉ dùng để cập nhật dữ liệu cho máy chủ hoặc lấy thông tin từ máy chủ. Trên lĩnh vực đang phát triển hiện nay là Internet, ngôn ngữ SQL lại càng đóng vai trò quan trọng hơn. Nó được sử dụng để nhanh chóng tạo ra các trang Web động (Dynamic Web Page).
Trang Web động thường có nội dung được lấy ra từ CSDL. SQL có thể được sử dụng như một chất keo kết dính giữa CSDL và trang Web. Khi người dùng yêu cầu, SQL sẽ thực hiện việc truy cập thông tin trong CSDL trên máy chủ và hiển thị kết quả trên trang Web. Và SQL cũng là công cụ để cập nhật thông tin cho CSDL đó.1 Các lệnh trong ngôn ngữ SQL Theo Microsoft, cơ sY dữ liệu (database) là công cụ thu thập và tổ chức các thông tin.
Cơ sY dữ liệu có thể lưu trữ các thông tin về người dùng, đơn đặt hàng hoặc các thông tin khác. Nhiều cơ sY dữ liệu có thể mY chương trình xử lý văn bản hoặc bảng tính, đối với các doanh nghiệp lớn, sẽ hữu ích hơn khi tạo hệ thống quản lý cơ sY dữ liệu. Để kiểm soát thông tin trong các cơ sY dữ liệu, SQL được sử dụng để cho phWp người dùng lấy các dữ liệu cụ thể mà họ đang tìm kiếm. Mặc dù là chỉ là ngôn ngữ lập trình đơn giản, tuy nhiên SQL cũng khá mạnh và hữu ích.
Theo trang Database Dir, SQL có thể chèn dữ liệu vào các bảng cơ sY dữ liệu, sửa đổi dữ liệu trong các bảng cơ sY dữ liệu hiện có và xóa dữ liệu từ bảng cơ sY dữ liệu SQL. Ngoài ra SQL có thể tự sửa đổi cấu trúc cơ sY dữ liệu bằng cách tạo, sửa đổi và xóa các đối tượng cơ sY dữ liệu khác. Theo Database Dir, SQL sử dụng tập lệnh để thao tác dữ liệu trong cơ sY dữ liệu. Ví dụ như lệnh SQL INSERT được sử dụng để thêm dữ liệu vào các bảng cơ sY dữ liệu, lệnh SQL SELECT được sử dụng để lấy dữ liệu từ các bảng cơ sY dữ liệu và SQL UPDATE để chỉnh sửa các bản ghi cơ sY dữ liệu hiện có.
Ngôn ngữ lập trình SQL được các nhà nghiên cứu IBM, Raymond Boyce và Donald Chamberlin phát triển vào những năm 1970. Ngôn ngữ lập trình này được biết đến là SEQUEL, được tạo ra sau khi cuốn mô hình dữ liệu quan hệ cho các ngân hàng chia sẻ dữ liệu lớn của Edgar Frank Todd được xuất bản vào năm 1970. Trong cuốn sách của mình, Todd để xuất tất cả dữ liệu trong cơ sY dữ liệu được thể hiện dưới hình thức quan hệ. Trong cuốn Oracle Quick Guides (Cornelio Books 2013), tác giả Malcolm Coxall viết rẳng phiên bản SQL ban đầu được thiết kế để thao tác và truy xuất dữ liệu được lưu trữ trong các hệ thống quản lý cơ sY dữ liệu quan hệ ban đầu của IBM được gọi là System R.
Khoảng vài năm sau đó, SQL đã được công bố công khai. Năm 1979, công ty có tên gọi là Relational Software, sau này đổi tên là Oracle, đã phát hành phiên bản có tên gọi là ngôn ngữ lập trình SQL Oracle V2. Kể từ đó Viện tiêu chuẩn quốc gia Hoa Kỳ (ANSI) và Tổ chức tiêu chuẩn hóa quốc tế (International Standards Organization) đã coi SQL là ngôn ngữ chuẩn trong giao tiếp cơ sY dữ liệu quan hệ. Mặc dù các nhà cung cấp SQL lớn đã sửa đổi ngôn ngữ theo ý muốn của họ, nhưng phần lớn dựa vào các chương trình SQL trong phiên bản đã được ANSI chấp thuận.
[4] Hiện nay SQL được sử dụng phổ biến Y hầu như mọi hệ quản trị cơ sY dữ liệu. Điều này được diễn giải do rất nhiều những lợi ích mà SQL mang lại. Cụ thể: Cho phWp người dùng truy cập dữ liệu trong các hệ thống quản lý cơ sY dữ liệu quan hệ. Cho phWp người dùng mô tả dữ liệu.
Cho phWp người dùng xác định dữ liệu trong cơ sY dữ liệu và thao tác dữ liệu đó. Cho phWp nhúng trong các ngôn ngữ khác sử dụng mô-đun SQL, thư viện và trình biên dịch trước. Cho phWp người dùng tạo và thả các cơ sY dữ liệu và bảng. Cho phWp người dùng tạo chế độ view, thủ tục lưu trữ, chức năng trong cơ sY dữ liệu.
Cho phWp người dùng thiết lập quyền trên các bảng, thủ tục và view. Về cơ bản, từ khóa SQL chia thành nhiều nhóm: Nhóm lấy dữ liệu: Thao tác sử dụng nhiều nhất trong một cơ sY dữ liệu dựa trên giao dịch là thao tác lấy dữ liệu. SELECT được sử dụng để lấy dữ liệu từ một hoặc nhiều bảng trong cơ sY dữ liệu, SELECT là lệnh thường dùng nhất của ngôn ngữ sửa đổi dữ liệu (tạm dịch) (tiếng Anh: Data Manipulation Language - DML). Trong việc tạo ra câu truy vấn SELECT, người sử dụng phải đưa ra mô tả cho những dữ liệu mình muốn lấy ra chứ không chỉ ra những hành động vật lý nào bắt buộc phải thực hiện để lấy ra kết quả đó.
Hệ thống cơ sY dữ liệu, hay chính xác hơn là bộ tối ưu hóa câu truy vấn sẽ dịch từ câu truy vấn sang kế hoạch truy vấn tối ưu. Những từ khóa liên quan tới SELECT bao gồm: FROM dùng để chỉ định dữ liệu sẽ được lấy ra từ những bảng nào, và các bảng đó quan hệ với nhau như thế nào. WHERE dùng để xác định những bản ghi nào sẽ được lấy ra, hoặc áp dụng với GROUP BY. GROUP BY dùng để kết hợp các bản ghi có những giá trị liên quan với nhau thành các phần tử của một tập hợp nhỏ hơn các bản ghi.
HAVING dùng để xác định những bản ghi nào, là kết quả từ từ khóa GROUP BY, sẽ được lấy ra. ORDER BY dùng để xác định dữ liệu lấy ra sẽ được sắp xếp theo những cột nào. Nhóm sửa đổi dữ liệu: Ngôn ngữ sửa đổi dữ liệu (Data Manipulation Language - DML), là một phần nhỏ của ngôn ngữ, có những thành phần tiêu chuẩn dùng để thêm, cập nhật và xóa dữ liệu delete data. INSERT dùng để thêm dữ liệu vào một bảng đã tồn tại.
UPDATE dùng để thay đổi giá trị của một tập hợp các bản ghi trong một bảng. MERGE dùng để kết hợp dữ liệu của nhiều bảng. Nó được dùng như việc kết hợp giữa hai phần tử INSERT và UPDATE. DELETE xóa những bản ghi tồn tại trong một bảng.
TRUNCATE Xóa toàn bộ dữ liệu trong một bảng (không phải là tiêu chuẩn, nhưng là một lệnh SQL phổ biến). Nhóm định nghĩa dữ liệu: Ngôn ngữ định nghĩa dữ liệu (Data Definition Language, viết tắt là DDL) là một trong những phần chính của ngôn ngữ truy vấn. Các câu lệnh này dùng để định nghĩa cấu trúc của cơ sY dữ liệu, bao gồm định nghĩa các hàng, các cột, các bảng dữ liệu, các chỉ số và một số thuộc tính khác liên quan đến cơ sY dữ liệu như vị trí của file. Các câu lệnh ngôn ngữ định nghĩa dữ liệu là thành phần chính trong các hệ quản lý dữ liệu và có sự khác biệt rất nhiều giữa các ngôn ngữ truy vấn trên các hệ khác nhau.
Nhóm điều khiển dữ liệu: GRANT dùng để cung cấp một đặc quyền cho người dùng. REVOKE dùng để lấy lại đặc quyền cụ thể từ người dùng.2 Cơ chế hoạt động của ứng dụng web application Mô hình client-server là một mô hình nổi tiếng trong mạng máy tính, được áp dụng rất rộng rãi và là mô hình của mọi trang web hiện có. Ý tưYng của mô hình này là máy con (đóng vai trò là máy khách) gửi một yêu cầu (request) để máy chủ (đóng vai trò người cung ứng dịch vụ), máy chủ sẽ xử lý và trả kết quả về cho máy khách.2 Mô hình client - sever Thuật ngữ server được dùng cho những chương trình thi hành như một dịch vụ trên toàn mạng. Các chương trình server này chấp nhận tất cả các yêu cầu hợp lệ đến từ mọi nơi trên mạng, sau đó nó thi hành dịch vụ và trả kết quả về máy yêu cầu.
Một chương trình được coi là client khi nó gửi các yêu cầu tới máy có chương trình server và chờ đợi câu trả lời từ server. Chương trình server và client giao tiếp với nhau bằng các thông điệp (messages) thông qua một cổng truyền thông liên tác IPC (Interprocess Communication). Để một chương trình server và một chương trình client có thể giao tiếp được với nhau thì giữa chúng phải có một chuẩn để nói chuyện, chuẩn này được gọi là giao thức. Nếu một chương trình client nào đó muốn yêu cầu lấy thông tin từ server thì nó phải tuân theo giao thức mà server đó đưa ra.
Bản thân chúng ta khi cần xây dựng một mô hình client/server cụ thể thì ta cũng có thể tự tạo ra một giao thức riêng nhưng thường chúng ta chỉ làm được điều này Y tầng ứng dụng của mạng. Với sự phát triển mạng như hiện này thì có rất nhiều giao thức chuẩn trên mạng ra đời nhằm đáp ứng nhu cầu phát triển này. Các giao thức chuẩn (Y tầng mạng và vận chuyển) được sử dụng rộng rãi nhất hiện nay như: giao thức TCP/IP, giao thức SNA của IBM, OSI, ISDN, X.25 hoặc giao thức LAN-to-LAN NetBIOS. Một máy tính chứa chương trình server được coi là một máy chủ hay máy phục vụ (server) và máy chứa chương trình client được coi là máy tớ (client).
Mô hình mạng trên đó có các máy chủ và máy tớ giao tiếp với nhau theo 1 hoặc nhiều dịch vụ được gọi là mô hình client/server. Thực tế thì mô hình client/server là sự mY rộng tự nhiên và tiện lợi cho việc truyền thông liên tiến trình trên các máy tính cá nhân.