CHƯƠNG 1 NoSQL 1 1 NoSQL (NoSQL Database) là gì? 1 1 1 Khái niệm Trong nhiều thập kỷ, mô hình dữ liệu chiếm ưu thế về lượng sử dụng để phát triển ứng dụng là mô hình dữ liệu quan hệ được sử dụng tro[.]
CHƯƠNG 1: NoSQL 1.1 NoSQL (NoSQL Database) gì? 1.1.1 Khái niệm: Trong nhiều thập kỷ, mơ hình liệu chiếm ưu lượng sử dụng để phát triển ứng dụng mơ hình liệu quan hệ sử dụng sở liệu quan hệ, ví dụ Oracle, DB2, SQL Server, MySQL PostgreSQL Mãi cuối năm 2000, mơ hình liệu khác bắt đầu đưa vào áp dụng sử dụng nhiều Để phân biệt phân loại sở liệu mơ hình liệu này, từ "NoSQL" đặt Thông thường, từ "NoSQL" sử dụng tương đương với "phi quan hệ" NoSQL Database sở liệu xây dựng dành riêng cho mơ hình liệu có sơ đờ linh hoạt để xây dựng ứng dụng đại, liệu lớn ứng dụng web thời gian thực Cơ sở liệu NoSQL cơng nhận rộng rãi khả dễ phát triển, chức hiệu quy mô lớn Các hệ thống NoSQL gọi "Not only SQL" (không SQL) để nhấn mạnh chúng hỗ trợ ngơn ngữ truy vấn dạng SQL 1.1.2 Hoạt động: Cơ sở liệu NoSQL sử dụng nhiều loại mơ hình liệu đa dạng để truy cập quản lý liệu, ví dụ văn bản, đờ thị, khóa – giá trị, nhớ tìm kiếm Các loại sở liệu tối ưu hóa dành riêng cho ứng dụng u cầu mơ hình liệu linh hoạt có lượng liệu lớn độ trễ thấp, đạt cách giảm bớt số hạn chế tính quán liệu sở liệu khác Trong sở liệu quan hệ, hồ sơ sách thường phân tách (hay gọi "chuẩn hóa") lưu trữ bảng tách biệt nhau, mối quan hệ quy định ràng buộc khóa ngoại khóa Trong ví dụ này, bảng Sách có cột cho ISBN, Tên sách Số phiên bản, bảng Tác giả có cột cho ID tác giả Tên tác giả cuối cùng, bảng Tác giả–ISBN có cột cho ID tác giả ISBN Mơ hình quan hệ thiết kế phép sở liệu thực thi tính tồn vẹn tham chiếu nhiều bảng sở liệu, chuẩn hóa để giảm dư thừa thường tối ưu hóa cho mục đích lưu trữ Trong sở liệu NoSQL, hồ sơ sách thường lưu trữ dạng văn JSON Với sách, mục, ISBN, Tên sách, Số phiên bản, Tên tác giả ID tác giả lưu trữ dạng thuộc tính văn Trong mơ hình này, liệu tối ưu hóa cho việc phát triển trực quan khả thay đổi quy mô theo chiều ngang 1.2 Ưu điểm của NoSQL? Cơ sở liệu NoSQL lựa chọn thích hợp cho nhiều ứng dụng đại, ví dụ di động, web trị chơi đòi hỏi phải sử dụng sở liệu thiết thực, linh hoạt, có khả thay đổi quy mô hiệu cao để đem đến cho người dùng trải nghiệm tuyệt vời Linh hoạt: Cơ sở liệu NoSQL thường cung cấp sơ đồ linh hoạt giúp công đoạn phát triển nhanh có khả lặp lại cao Mơ hình liệu linh hoạt biến sở liệu NoSQL thành lựa chọn lý tưởng cho liệu không tổ chức thành cấu trúc có cấu trúc chưa hồn chỉnh Khả thay đổi quy mô: Cơ sở liệu NoSQL thường thiết kế để tăng quy mô cách sử dụng cụm phần cứng phân phối thay tăng quy mơ cách bổ sung máy chủ mạnh tốn Một số nhà cung cấp dịch vụ đám mây xử lý hoạt động cách không công khai dạng dịch vụ quản lý đầy đủ Hiệu cao: Cơ sở liệu NoSQL tối ưu hóa theo mơ hình liệu (ví dụ văn bản, khóa–giá trị đồ thị) mẫu truy cập giúp tăng hiệu cao so với việc cố gắng đạt mức độ chức tương tự sở liệu quan hệ Cực kỳ thiết thực: Cơ sở liệu NoSQL cung cấp API kiểu liệu thiết thực xây dựng riêng cho mơ hình liệu tương ứng 1.3 Các loại sở liệu NoSQL Key-value stores: Cơ sở liệu khóa–giá trị có khả phân mảnh cao cho phép thay đổi quy mô theo chiều ngang quy mơ lớn mà loại hình sở liệu khác khơng thể làm Mơ hình liệu khóa–giá trị dùng cho trị chơi, cơng nghệ quảng cáo đặc biệt thích hợp cho IoT Amazon DynamoDB thiết kế để có độ trễ ổn định vài mili giây cho khối lượng công việc thuộc quy mô Hiệu ổn định lý để di chuyển tính Stories Snapchat (kể khối lượng công việc ghi lưu trữ lớn Snapchat) sang DynamoDB Document Oriented databases: Trong mã ứng dụng, liệu thường biểu diễn dạng đối tượng văn dạng JSON mơ hình liệu hiệu trực quan cho nhà phát triển Cơ sở liệu văn giúp nhà phát triển dễ dàng lưu trữ truy vấn liệu sở liệu cách sử dụng định dạng mô hình văn họ sử dụng mã ứng dụng Tính chất linh hoạt, bán cấu trúc phân cấp văn sở liệu văn cho phép chúng phát triển phù hợp với u cầu ứng dụng Mơ hình văn phát huy hiệu với danh mục, hồ sơ người dùng hệ thống quản lý nội dung, nơi văn phát triển theo thời gian Amazon DocumentDB (với khả tương thích MongoDB) MongoDB sở liệu văn phổ biến cung cấp API mạnh mẽ trực quan để phát triển linh hoạt lặp lại Graph stores: Mục đích sở liệu đờ thị giúp việc dựng chạy ứng dụng hoạt động với liệu có khả kết nối cao trở nên dễ dàng Cơ sở liệu đồ thị thường sử dụng cho đồ thị tri thức, mạng xã hội, công cụ đề xuất phát lừa đảo Amazon Neptune dịch vụ sở liệu đồ thị quản lý đầy đủ Neptune hỗ trợ mơ hình Đờ thị thuộc tính lẫn Framework mô tả tài nguyên (RDF), cung cấp cho người dùng lựa chọn hai API đồ thị: TinkerPop RDF/SPARQL Các sở liệu đờ thị phổ biến gờm có Neo4j Giraph Column-oriented databases (column-family) Cơ sở liệu column-family lưu trữ liệu nhiều cột dòng với key cho dòng Column families nhóm liệu liên quan truy cập với Ví dụ, với khách hàng, thường xuyên sử dụng thông tin cá nhân lúc khơng phải hóa đơn họ Cassandra số sở liệu column-family phổ biến Ngồi cịn có số sở liệu khác HBase, Hypertable Amazon DynamoDB Cassandra miêu tả nhanh khả mở rộng dễ dàng với thao tác viết thông qua cụm Các cụm khơng có node master, việc đọc ghi đểu xử lý node cụm Tìm kiếm: Nhiều ứng dụng xuất nhật ký để giúp nhà phát triển khắc phục cố Amazon Elasticsearch Service (Amazon ES) Cơ sở liệu xây dựng chuyên dụng để cung cấp khả ảo hóa phân tích liệu máy tạo gần theo thời gian thực cách tạo mục, tập hợp tìm kiếm nhật ký số liệu có cấu trúc chưa hồn chỉnh Amazon ES cịn cơng cụ tìm kiếm mạnh mẽ có hiệu cao dành cho trường hợp sử dụng tìm kiếm tồn văn Expedia sử dụng 150 miền Amazon ES, 30 TB liệu 30 tỷ văn cho nhiều chức đóng vai trị quan trọng, từ theo dõi khắc phục cố khâu vận hành đến tối ưu hóa q trình theo dấu định giá chờng ứng dụng phân phối 1.4 Cơ sở liệu SQL (quan hệ) so với Cơ sở liệu NoSQL (phi quan hệ) Trong nhiều thập kỷ, mơ hình liệu chiếm ưu lượng sử dụng để phát triển ứng dụng mơ hình liệu quan hệ sử dụng sở liệu quan hệ, ví dụ Oracle, DB2, SQL Server, MySQL PostgreSQL Mãi cuối năm 2000, mơ hình liệu khác bắt đầu đưa vào áp dụng sử dụng nhiều Để phân biệt phân loại sở liệu mơ hình liệu này, từ "NoSQL" đặt Thông thường, thuật ngữ "NoSQL" sử dụng tương đương với "phi quan hệ" Mặc dù có nhiều loại sở liệu NoSQL với nhiều tính đa dạng, bảng sau minh họa số khác biệt sở liệu SQL NoSQL 1.4.1 So sánh tổng quát: Cơ sở liệu quan hệ Cơ sở liệu NoSQL Khối lượng công việc tối ưu Cơ sở liệu quan hệ thiết kế dành cho ứng dụng xử lý giao dịch trực tuyến (OLTP) giao dịch có độ ổn định cao thích hợp để xử lí phân tích trực tuyến (OLAP) Các sở liệu NoSQL nhớ, giá trị–khóa, văn đờ thị thiết kế cho OLTP cho số mẫu truy cập liệu, bao gờm ứng dụng có độ trễ thấp Cơ sở liệu tìm kiếm NoSQL thiết kế để phục vụ phân tích liệu có cấu trúc chưa hồn chỉnh Mơ hình liệu Mơ hình quan hệ chuẩn hóa liệu vào bảng hình thành từ hàng cột Sơ đồ quy định rõ ràng bảng, hàng, cột, mục, mối quan hệ bảng thành tố sở liệu khác Cơ sở liệu thực thi tính tồn vẹn tham chiếu mối quan hệ bảng Cơ sở liệu NoSQL cung cấp nhiều mơ hình liệu đa dạng, có văn bản, đờ thị, khóa–giá trị, nhớ tìm kiếm Thuộc tính ACID Cơ sở liệu quan hệ có thuộc tính mang tính nguyên tố, quán, tách biệt bền vững (ACID): Cơ sở liệu NoSQL thường phải đánh đổi cách nới lỏng số thuộc tính ACID sở liệu quan hệ để có mơ hình liệu linh hoạt có khả thay đổi quy mô theo chiều ngang Việc biến sở liệu NoSQL thành lựa chọn tuyệt vời cho trường hợp sử dụng cần thông lượng cao, độ trễ thấp cần thay đổi quy mô theo chiều ngang vượt qua giới hạn phiên • Tính ngun tố địi hỏi giao dịch phải thực thi đầy đủ hồn tồn khơng thực • Tính qn địi hỏi giao dịch thực hiện, liệu phải quán với sơ đờ sở liệu • Tính tách biệt địi hỏi giao dịch diễn đờng thời phải thực thi tách biệt với • Tính bền vững địi hỏi phải có khả phục hời từ tình trạng hư hỏng hệ thống điện đột ngột trạng thái biết cuối Hiệu Hiệu thường phụ thuộc vào hệ thống ổ đĩa Thơng thường, việc tối ưu hóa truy vấn, mục cấu trúc bảng bắt buộc phải thực để đạt mức hiệu tối đa Hiệu thường xem chức kích cỡ cụm phần cứng ngầm, độ trễ mạng ứng dụng đưa lệnh gọi Quy mô Cơ sở liệu quan hệ thường tăng quy mô cách tăng lực điện toán phần cứng tăng quy mô cách thêm khối lượng công việc đọc Cơ sở liệu NoSQL thường có tính phân mảnh cao mẫu truy cập khóa–giá trị có khả tăng quy mơ cách sử dụng kiến trúc phân phối để tăng thông lượng, đem đến hiệu ổn định với quy mô gần không giới hạn API Yêu cầu lưu trữ truy xuất liệu truyền đạt cách sử dụng truy vấn quán với ngôn ngữ truy vấn có cấu trúc (SQL) Các truy vấn phân tích thực thi sở liệu quan hệ API sở đối tượng cho phép nhà phát triển ứng dụng dễ dàng lưu trữ truy xuất cấu trúc liệu nhớ Khóa phân mảnh tìm kiếm cặp khóa–giá trị, tập hợp cột văn có cấu trúc chưa hồn chỉnh có chứa đối tượng thuộc tính ứng dụng xếp theo chuỗi 1.4.2 Thống kê việc sử dụng database năm 2018 : 1.4.3 Bảng thuật ngữ: SQL MongoDB DynamoDB Cassandra Couchbase Bảng Bộ sưu tập Bảng Bảng Bộ chứa liệu Hàng Tài liệu Mục Hàng Tài liệu Cột Trường Thuộc tính Cột Trường Khóa Id đối tượng Khóa Khóa ID văn Chỉ mục Chỉ mục Chỉ mục thứ cấp Chỉ mục Chỉ mục Chế độ xem Chế độ xem Chỉ mục thứ cấp toàn cục Chế độ xem cụ thể hóa Chế độ xem Bảng đối tượng lờng Văn nhúng Bản đồ Bản đồ Bản đồ Mảng Mảng Danh sách Danh sách Danh sách 1.5 MongoDB 1.5.1 Tổng quan Một số định nghĩa trước sâu MongoDB Đây cross-platform, DB hướng documents với hiệu cao, đáp ứng cho đa dạng hệ thống dễ dàng để scale Tư tưởng MongoDB thông qua khái niệm collection document Vì MongoDB crossplatform NoSQL Document Oriented databases Database container vật lý cho collection Mỗi DB thiết lập cho riêng danh sách files hệ thống files Một máy chủ MongoDB đơn thường có nhiều DB Collection nhóm documents MongoDB Nó tương đương với table RDBMS Một Collection tồn sở liệu Các collection ko tạo nên schema Documents collection có fields khác Thơng thường, tất documents collections có mục đích giống liên quan tới Document tập hợp cặp key-value Documents có schema động Schema động có nghĩa documents collection khơng cần phải có nhóm fields hay cấu trúc giống nhau, fields phổ biến documents collection chứa loại liệu khác 1.5.2 Yêu cầu thiết kế schema MongoDB • Thiết kế schema dựa yêu cầu user • Kết hợp object vào document bạn sử dụng chúng với Nếu khơng tách riêng hẳn (nhưng cần phải ý sau khơng phải joins) • Duplicate liệu (nhưng có giới hạn) khơng gian đĩa rẻ so với tốc độ xử lý • joins write, khơng joins read • Tối ưu schema cho hầu hết case sử dụng thông thường • Tập hợp nhóm phức tạp vào schema Ví dụ : Giả sử khách hàng cần thiết kế DB cho blog cân nhắc khác biệt schema RDMS MongoDB Web có u cầu sau : • Mọi post có unique title, description url { user:'COMMENT_BY', message: TEXT, dateCreated: DATE_TIME, like: LIKES }, { user:'COMMENT_BY', message: TEXT, dateCreated: DATE_TIME, like: LIKES } ] } Để show post RDBMS cần phải join bảng MongoDB cần lấy từ collections Đây ưu điểm tốt NoSQL nói chung MongoDB nói riêng 1.5.3 Một số lệnh liên quan đến Database a MongoDB - Create/Drop Database use DATABASE_NAME Ví dụ : >use duongdb switched to db duongdb Check sử dụng DB >db duongdb Show danh sách các DB server >show dbs local test 0.78125GB 0.23012GB Sau create phải insert mợt documents vào list >db.movie.insert({"name":"tutorials point"}) >show dbs local 0.78125GB duongdb test 0.23012GB 0.23012GB Drop DB db.dropDatabase() b MongoDB - Create/Drop Collection db.createCollection(name, options) name yêu cầu phải string Trong mục options chứa nhiều thơng số : capped, autoIndexID, size , max capped tập hợp collection có size fixed tự động viết đề lên entries cũ chạm đến max size Nếu bạn cho true bạn phải điền size max autoIndexID tự động tạo index biến _id field.s Mặc định giá trị false syntax để drop collection db.COLLECTION_NAME.drop() Ví dụ : >use test switched to db test >db.createCollection("duongcollection") { "ok" : } >show collections duongcollection system.indexes >db.createCollection("mycol", { capped : true, autoIndexID : true, size : 6142800, max : 10000 } ) { "ok" : } > Trong MongoDB phải tạo collection MongoDB tự động tạo collection insert documents >db.tutorialspoint.insert({"name" : "tutorialspoint"}) >show collections mycol mycollection system.indexes tutorialspoint Đây ví dụ drop >use mydb switched to db mydb >show collections mycol mycollection system.indexes tutorialspoint >db.mycollection.drop() true 1.5.3 Các kiểu liệu MongoDB • String: String MongoDB phải UTF-8 hợp lệ • Integer: Số nguyên 32 bit 64 bit tùy thuộc vào máy chủ bạn • Boolean • Double • Min/ Max keys: Loại sử dụng để so sánh giá trị yếu tố thấp cao BSON • Array • Timestamp • Object • Null • Symbol • Date • Object ID • Binary data • Code • Regular expression 1.5.4 Sử dụng MongoDB - Document - Insert mợt Document >db.COLLECTION_NAME.insert(document) Ví dụ >db.mycol.insert({ _id: ObjectId(7df78ad8902c), title: 'MongoDB Overview', description: 'MongoDB is no sql database', by: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }) Nếu muốn insert nhiều documents lệnh, cần cho array vào lệnh insert() >db.post.insert([ { title: 'MongoDB Overview', description: 'MongoDB is no sql database', by: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }, { title: 'NoSQL Database', description: 'NoSQL database doesn't have tables', by: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 20, comments: [ { user:'user1', message: 'My first comment', dateCreated: new Date(2013,11,10,2,35), like: } ] } ]) - Lệnh tìm kiếm >db.COLLECTION_NAME.find() - Để thể kết đẹp Có thể dùng thêm phương thức pretty() >db.mycol.find().pretty() { "_id": ObjectId(7df78ad8902c), "title": "MongoDB Overview", "description": "MongoDB is no sql database", "by": "tutorials point", "url": "http://www.tutorialspoint.com", "tags": ["mongodb", "database", "NoSQL"], "likes": "100" } > - Cách sử dụng find AND MongoDB >db.mycol.find({key1:value1, key2:value2}).pretty() - Cách sử dụng find OR MongoDB >db.mycol.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty() - Dưới ví dụ sử dụng AND OR MongoDB >db.mycol.find({"likes": {$gt:10}, $or: [{"by": "tutorials point"}, {"title": "MongoDB Overview"}]}).pretty() { "_id": ObjectId(7df78ad8902c), "title": "MongoDB Overview", "description": "MongoDB is no sql database", "by": "tutorials point", "url": "http://www.tutorialspoint.com", "tags": ["mongodb", "database", "NoSQL"], "likes": "100" } > - Lệnh UPDATE >db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA) Giá sử liệu ban đầu { "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"} { "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"} { "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"} Sau chạy >db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}}) Sẽ nhận kết sau { "_id" : ObjectId(5983548781331adf45ec5), "title":"New MongoDB Tutorial"} { "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"} { "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"} > Có thể update nhiều documents cach truyền param 'multi' cho true >db.mycol.update({'title':'MongoDB Overview'}, {$set:{'title':'New MongoDB Tutorial'}},{multi:true}) - Lệnh SAVE Cú pháp lệnh sau >db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA}) Ví dụ : >db.mycol.save( { "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview", "by":"Tutorials Point" } ) Khi chạy đoạn phần liệu documents có ID 5983548781331adf45ec7 bị thay sau >db.mycol.find() { "_id" : ObjectId(5983548781331adf45ec5), "title":"New MongoDB Tutorial} { "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"} { "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point New Topic", "by":"Tutorials Point"} > - Lệnh REMOVE Để xóa document MongoDB ta dùng method remove(): db.COLLECTION_NAME.remove(DELLETION_CRITTERIA, justOne) • Trong đó: • • DELLETION_CRITTERIA: điều kiện xóa (các ghi bị xóa) justOne: Nếu có giá trị true có nhiều ghi bị xóa (trường tùy chọn, khơng có xóa tất ghi thỏa mãn DELLETION_CRITTERIA) Ví dụ collection player có ghi sau: • {'_id':'1', 'name':'neymar', 'country':'brazil', 'age':'25'}, • • • • {'_id':'2', 'name':'hazard', 'country':'belgium', 'age':'25'}, {'_id':'3', 'name':'mbappe', 'country':'france', 'age':'18'}, {'_id':'4', 'name':'modric', 'country':'croatia', 'age':'30'}, {'_id':'5', 'name':'ronaldo', 'country':'portugal', 'age':'33'}, Bây muốn xóa đối tượng có name = neymar câu lệnh là: • db.player.remove({'name':'neymar'}) Kết quả: Tương tự, muốn xóa player có name gờm chữ ‘n’ câu lệnh là: • db.player.remove({'name':/n/}) Trường hợp tìm thấy nhiều player có name chứa chữ ‘n’ muốn xóa ghi câu lệnh là: • db.player.remove({'name':/n/},1) Trường hợp điều kiện xóa gờm nhiều điều kiện ta dùng $and $or truy vấn mongodb Ví dụ: Muốn xóa document có name bắt đầu ‘m’ country = ‘france’ câu lệnh sau: • db.player.remove({$and: [{'name':/^m/},{'country':'france'}]}) CHƯƠNG 2: NOSQL INJECTION 2.1 Khái niệm NoSQL Injection NoSQL Injection kỹ thuật lợi dụng lỗ hổng câu truy vấn lấy liệu website không an tồn web, kỹ thuật cơng phổ biến thành cơng tương đối cao Nguy hiểm của NoSQL Injection • Có thể gây thiệt hại khổng lồ Với NoSQL Injection, hacker truy cập phần tồn liệu hệ thống • Lỗ hổng tiếng, từ developer đến hacker gần biết Ngồi ra, cịn có số tool công NoSQL Injection cho dân “ngoại đạo”, người lập trình • Rất nhiều ơng lớn bị dính – Sony, Microsoft UK Mọi vụ lùm xùm liên quan tới “lộ liệu người dùng” nhiều dính dáng tới NoSQL Injection Dễ cơng, phổ biến, gây hậu nghiêm trọng, lý dó Inject (Khơng SQL, NoSQL mà OS LDAP) nằm chễm chễ vị trí đầu bảng top 10 lỗ hỗng bảo mật OWASP Tất nhiên XSS, CSRF, khơng mã hố liệu nằm list nốt Hậu quả của NoSQL Injection • Hậu lớn mà NoSQL Injection gây là: Làm lộ liệu database Tuỳ vào tầm quan trọng liệu mà hậu dao động mức nhẹ vơ nghiêm trọng • Lộ liệu khách hàng ảnh hưởng nghiêm trọng đến cơng ty Hình ảnh cơng ty bị ảnh hưởng, khách hàng chuyển qua sử dụng dịch vụ khác, dẫn đến phá sản v…v… • Lỗ hỗng ảnh hưởng lớn đến khách hàng Do họ thường dùng chung mật cho nhiều tài khoản, cần lộ mật tài khoản tài khoản khác lộ theo • Đây lý nhắc nhở phải mã hố mật khẩu, database có bị cơng người dùng không bị mật (Đây lý vietnamwork bị ăn chửi khơng mã hố mật khẩu) • Trong nhiều trường hợp, hacker không đọc liệu mà cịn chỉnh sửa liệu Lúc hacker đăng nhập vai trị admin, lợi dụng hệ thống, xố tồn liệu để hệ thống ngừng hoạt động 2.2 Tấn công NoSQL INJECTION 2.2.1 Khai thác lỗ hỗng Injection NoSQL Điểm khác biệt lớn DB NoSQL so với DB RDBMS việc lưu trữ, truy xuất liệu không thông qua câu lệnh SQL, vốn dạng string “inject” biến đầu vào khơng kiểm soát kỹ để tạo truy vấn khác với truy vấn ban đầu Với NoSQL, tư tưởng “inject” giống với SQL Injection truyền thống, thay “inject” vào string, ta phải “inject” vào cấu trúc khác Cụ thể với MongoDB JSON VD: Một lệnh lấy liệu từ MongoDB PHP PHP: $db->user->find(array(“uname”=>$_POST[“uname”], “passwd”=>$_POST[“passwd”]) Trong lệnh trên, PHP lấy colection user tập document có chứa cặp keyvalue (uname:$_POST[‘uname’]) (passwd:$_POST[‘passwd’]) Để công NoSQL dạng này, ta lợi dụng việc PHP cho phép biến nhập vào thuộc kiểu array sử dụng số toán tử MongoDB để thay đổi giá trị trả Sau inject, cấu trúc chuỗi JSON truy vấn khác với chuỗi JSON ban đầu Gửi Post data: PHP: uname[$regex]=.*&passwd[$regex]=.* Chuỗi JSON truy vấn trở thành: PHP: { “uname”: { “$regex” : “.*”}, “passwd”: { “$regex” : “.*”} } Toán tử $regex dùng để match chuỗi regular expression với string Ở ta dùng “.*”, match với string Như chuỗi JSON sau “inject” trả tất document collection user mà khơng có việc lọc username password Ngồi ta sử dụng toán tử khác MongoDB để khai thác, $or, $and, $in, $notin - Phịng tránh NoSQL Injection Kiểm sốt đầu vào cách hữu hiệu để chống inject Json Không cho phép biến đầu vào thuộc kiểu array Chặn số kí tự, keyword: [, ], {, }, $or, $and, $regex, 2.2.2 Các dạng Injection NoSQL khác Login Bypass Đây loại công nguy hiểm hacker bỏ qua quy trình đăng nhập giành qn cách khơng khó khăn Giả sử ta có đoạn login sử dụng NodeJs - express.js - mongodb sau: ... từ "NoSQL" đặt Thông thường, thuật ngữ "NoSQL" sử dụng tương đương với "phi quan hệ" Mặc dù có nhiều loại sở liệu NoSQL với nhiều tính đa dạng, bảng sau minh họa số khác biệt sở liệu SQL NoSQL. .. 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL' ], likes: 100 }, { title: 'NoSQL Database', description: 'NoSQL database doesn't have tables', by: 'tutorials point', url:... db.player.remove({$and: [{'name':/^m/},{'country':'france'}]}) CHƯƠNG 2: NOSQL INJECTION 2.1 Khái niệm NoSQL Injection NoSQL Injection kỹ thuật lợi dụng lỗ hổng câu truy vấn lấy liệu website