Đồ án Xây dựng website giới thiệu và bán thực phẩm

Việc sử dụng whilelist phải đảm bảo chắc chắc bạn không nhận được dữ liệu xấu. Ví dụ : một ai đó cố gắng nhập vào username và color không cho phép sử lý. Điều tồi tệ xẩy ra là $clean không chứa giá trị username và color, nếu user name được yêu cầu một mẩu tin báo lỗi sẽ hiện lên yêu cầu nhập dữ liệu đúng. bạn cần phải bắt buộc người dùng nhập vào thông đúng hơn là cố gắng lọc dữ liệu. nếu bạn cố lọc dữ liệu bạn cần có những kết luận về những dữ liệu xấu, nó gặp số vấn đề khi sử dụng với blacklist

doc56 trang | Chia sẻ: netpro | Lượt xem: 1842 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Đồ án Xây dựng website giới thiệu và bán thực phẩm, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
c hiện thương mại điện tử là internet.Thương mại điện tử là một hệ thống không chỉ tập trung vào việc mua bán hang hóa , dịch vụ nhằm phát sinh lợi nhuận mà còn nhằm hỗ trợ cho các nhu cầu của khách hang cũng như hỗ trợ các doanh nghiệp giao tiếp với nhau dễ dàng hơn. Loại hình giao dịch trong thương mại điện tử.Có 3 loại hình giao dịch chính: B-2-C: giữa doanh nghiệp với khách hàng . C-2-C: giữa khách hàng với khách hàng . B-2-B: giữa doanh nghiệp với doanh nghiệp. Ở đây sử dụng mô hình B-2-C: giữa doanh nghiệp với khách hàng . Lợi ích của thương mại điện tử (TMĐT) là gì? Lợi ích đối với người tiêu dùng: •Mua hàng được 24/24h. •Mua hàng trên toàn thế giới. •Lựa chọn được hàng hóa theo sở thích với giá rẻ và chất lượng hơn. •TMĐT qua INTERNET giúp người tiêu giảm đáng kể thời gian và chí phí giao dịch. •Có thể xem rất nhiều hàng thậm chí có thể chạy thử với các phần mềm chuyên dụng trước khi mua. •Có thể tham gia đấu giá. •Trao đổi thông tin với người tiêu dùng khác. Lợi ích với doanh nghiệp: Cho phép mở rộng thị trường. Giảm chi phí hoạt động. Giảm chi phí quản lý kho. Cho phép cá thể hóa khách hàng. Giảm thời gian thanh toán,giao dịch. Giảm chi phí thông tin lien lạc. Giảm chi phí quảng cáo. Xây dựng quan hệ với nhiều đối tác. Cho phép làm việc ở nhà. Hàng hóa mua bán với giá thấp cho lợi ích xã hội lớn. Không có sự phân biệt vùng sâu, vùng xa. Cung cấp dịch vụ công ích,từ đó tạo lợi nhuận cho người dân. Xây dựng chính phủ điện tử: tạo quan hệ trực tuyến giữa công dân và nhà nước. 3.2 Giới thiệu về cửa hàng trên mạng internet . Cửa hàng trên mạng internet thực chất là gì? Trong không gian ảo của cửa hàng được xây dụng bằng phần mềm, các sản phẩm là những hình ảnh đại diện cho sản phẩm để giao dịch. Tận dụng tính đa phương tiện của môi trường inter net, các cửa hàng trực tuyến(các website) được xây dựng trên nền tảng HTML giúp cho doanh nghiệp và khách hàng ,khách hàng với khách hàng có thể tìm hiểu và trao đổi thông tin,mua bán hàng hóa trên mạng 1 cách thuận tiện và dễ dàng. Đichợ.vn giống như một siêu thị nhưng quy mô bán hàng của nó chỉ gói gọn trong hàng hóa về thực phẩm. Cửa hàng trên mạng hoạt động như thế nào ? Do đặc điểm nổi bật của cửa hàng trên mạng internet là người mua hàng và người bán không hề gặp mặt nhau.Cái khó của khách hàng là không thể trực tiếp kiểm tra mặt hàng cần mua( sản phẩm này thế nào, nguồn gốc ra sao ?). khi đi mua hàng trên cửa hàng ảo, khách hàng luôn mong muốn được phục vu với một chất lượng ngang bằng với khi mua hàng ở cửa hàng thật. Do đó để xây dựng cửa hàng ảo,cần phải xây dựng cho cửa hàng ảo những chức năng sau : Quản lý khách hàng. Quản lý mua hàng. Quản lý các mặt hàng. Bán hàng. Quản lý và xử lý đơn hàng. Xúc tiến quảng bá sản phẩm. 3.3 Mục tiêu và yêu cầu khi xây dựng hệ thống. Mục tiêu xây dựng hệ thống : +Nhằm đắp ứng nhu cầu mở rộng của thi trường tiêu thụ hàng hóa. +Thông tin luôn được cập nhật mới và luôn đáp ứng nhu cầu tìm kiếm thông tin của khách hàng. Bên cạnh đó còn tiết kiệm được thời gian và chi phí đi lại cho khách hàng. Những yêu cầu đặt ra cho hệ thống. +Hỗ trợ cho khách hàng : An toàn khi mua hàng. Mua hàng thông qua internet. Thanh toán qua tín dụng, thanh toán trực tiếp… +Hỗ trợ cho người quản trị : Hệ thống sẽ cung cấp cho người quản trị một mật khẩu để người quản trị truy cập vào hệ thống,thao tác trên cơ sở dữ liệu như : Bổ sung,câp nhật dữ liệu. Quản lý đơn hàng và khách hàng…. CHƯƠNG IV : LÝ THUYẾT CƠ SỞ 4.1 Ngôn ngữ lập trình web PHP 4.1.1 Php là gì? Cái tên PHP ban đầu được viết tắt bởi cụm từ Pesonnal Home Page,và được phát triển từ năm 1994 bởi Rasmus Lerdorf. Lúc đầu chỉ là một bộ đặc tả Perl, được sử dụng để lưu dấu vết người dung là một máy đặc tả (Scripting engine).Vào giữa năm 1997, PHP đã được phát triển nhanh chóng trong sự yêu thích của nhiều người. PHP đã không còn là một dự án cá nhân của Rasmus Lerdorf và đã trở thành một công nghệ web qua trọng. Zeev Suraski và An di Gutmans đã hoàn thiện việc phân tích cú pháp cho ngôn ngữ để rồi tháng 6 năm 1998, PHP3 đã ra đời (phiên bản này có phần mở rộng là *.php3). Cho đến tận thời điểm đó , PHP chưa một lần được phát triển chính thức, một yêu cầu viết lại bộ đặc tả được đưa ra, ngay sau đó PHP4 ra đời ,PHP 4 nhanh hơn PHP3 rất nhiều. Sự thành công hết sức to lớn của PHP 4.0 đã không làm cho nhóm phát triển PHP tự mãn.Cộng đồng php đã nhanh chóng giúp họ nhận ra những yếu kém của PHP 4 đặc biệt với khả năng hỗ trợ lập trình hướng đối tượng (OOP), xử lý XML, không hỗ trợ giao thức máy khách mới của MySQL 4.1 và 5.0, hỗ trợ dịch vụ web yếu. Những điểm này chính là mục đích để Zeev và Andi viết Zend Engine 2.0, lõi của PHP 5.0. Một thảo luận trên Slashdot đã cho thấy việc phát triển PHP 5.0 có thể đã bắt đầu vào thời điểm tháng 12 năm 2002 nhưng những bài phỏng vấn Zeev liên quan đến phiên bản này thì đã có mặt trên mạng Internet vào khoảng tháng 7 năm 2002. Ngày 29 tháng 6 năm 2003, PHP 5 Beta 1 đã chính thức được công bố để cộng đồng kiểm nghiệm. Đó cũng là phiên bản đầu tiên của Zend Engine 2.0. Phiên bản Beta 2 sau đó đã ra mắt vào tháng 10 năm 2003 với sự xuất hiện của hai tính năng rất được chờ đợi: Iterators, Reflection nhưng namespaces một tính năng gây tranh cãi khác đã bị loại khỏi mã nguồn. Ngày 21 tháng 12 năm 2003: PHP 5 Beta 3 đã được công bố để kiểm tra với việc phân phối kèm với Tidy, bỏ hỗ trợ Windows 95, khả năng gọi các hàm PHP bên trongXSLT, sửa chữa nhiều lỗi và thêm khá nhiều hàm mới. PHP 5 bản chính thức đã ra mắt ngày 13 tháng 7 năm 2004 sau một chuỗi khá dài các bản kiểm tra thử bao gồm Beta 4, RC 1, RC2, RC3. Mặc dù coi đây là phiên bản sản xuất đầu tiên nhưng PHP 5.0 vẫn còn một số lỗi trong đó đáng kể là lỗi xác thực HTTP. Ngày 14 tháng 7 năm 2005, PHP 5.1 Beta 3 được PHP Team công bố đánh dấu sự chín muồi mới của PHP với sự có mặt của PDO, một nỗ lực trong việc tạo ra một hệ thống API nhất quán trong việc truy cập cơ sở dữ liệu và thực hiện các câu truy vấn. Ngoài ra, trong PHP 5.1, các nhà phát triển PHP tiếp tục có những cải tiến trong nhân Zend Engine 2, nâng cấp mô đun PCRE lên bản PCRE 5.0 cùng những tính năng và cải tiến mới trong SOAP, streams và SP<script type="text/javascript" Hiện nay phiên bản tiếp theo của PHP đang được phát triển. Phiên bản PHP 6 được kỳ vọng sẽ lấp đầy những khiếm khuyết của PHP ở phiên bản hiện tại, ví dụ: hỗ trợ namespace (hiện tại các nhà phát triển vẫn chưa công bố rõ ràng về vấn đề này); hỗ trợ Unicode; sử dụng PDO làm API chuẩn cho việc truy cập cơ sở dữ liệu, các API cũ sẽ bị đưa ra thành thư viện PECL... PHP  bây giờ được gọi là PHP: Hypertext Preprocessor là một ngôn ngữ lập trình kịch bản hay một loại mã lệnh chủ yếu được dùng để phát triển các ứng dụng viết cho máy chủ, mã nguồn mở, dùng cho mục đích tổng quát. Nó rất thích hợp với web và có thể dễ dàng nhúng vào trang HTML. Do được tối ưu hóa cho các ứng dụng web, tốc độ nhanh, nhỏ gọn, cú pháp giống C và Java, dễ học và thời gian xây dựng sản phẩm tương đối ngắn hơn so với các ngôn ngữ khác nên PHP đã nhanh chóng trở thành một ngôn ngữ lập trình web phổ biến nhất thế giới. Ngôn ngữ, các thư viện, tài liệu gốc của PHP được xây dựng bởi cộng đồng và có sự đóng góp rất lớn của Zend Inc., công ty do các nhà phát triển cốt lõi của PHP lập nên nhằm tạo ra một môi trường chuyên nghiệp để đưa PHP phát triển ở quy mô doanh nghiệp. PHP ở cấp doanh nghiệp Rất nhiều nhà phát triển ứng dụng và quản lý dự án có quan điểm rằng PHP vẫn chưa sẵn sàng cho cấp doanh nghiệp (enterprise) và trên thực tế, PHP vẫn chưa xâm nhập sâu được vào thị trường này. Chính vì thế, Zend đã tiến hành nhiều biện pháp nhằm chuẩn hóa PHP, tạo được sự tin cậy hơn cho giới người dùng cao cấp. Zend Platform là một bộ sản phẩm giúp quản lý hệ thống ứng dụng PHP, nâng cao hiệu suất, tăng tốc độ của ứng dụng PHP. Zend Framework là một tập hợp các lớp, các thư viện lập trình viết bằng PHP (PHP 5) nhằm cung cấp một giao diện lập trình chuẩn cho các nhà phát triển ứng dụng. Ngoài ra, một số framework khác cũng đã được phát triển nhằm hỗ trợ lập trình PHP ở cấp doanh nghiệp, trong đó đáng chú ý có thể kể đến là CodeIgniter, CakePHP, Symfony, Seagull... Cú pháp Một ví dụ về mã PHP đã được làm nổi bật bằng màu nhúng trong HTML PHP chỉ phân tích các đoạn mã nằm trong những dấu giới hạn của nó. Bất cứ mã nào nằm ngoài những dấu giới hạn đều được xuất ra trực tiếp không thông qua xử lý bởi PHP. Các dấu giới hạn thường dùng nhất là , tương ứng với dấu giới hạn mở và đóng. Các dấu giới hạn  và  cũng đôi khi được sử dụng. Cách viết dấu giới hạn dạng thẻ ngắn cũng có thể được dùng để thông báo bắt đầu đoạn mã PHP, là . Những thẻ này thường xuyên được sử dụng, tuy nhiên giống với những thẻ kiểu ASP (), chúng không có tính di động cao bởi có thể bị vô hiệu khi cấu hình PHP. Bởi vậy, việc dùng các thẻ dạng ngăn hay các thẻ kiểu ASP không được khuyến khích. Mục đích của những dấu giới hạn này là ngăn cách mã PHP với những đoạn mã thuộc ngôn ngữ khác, gồm cả HTML. Mọi đoạn mã bên ngoài các dấu này đều bị hệ thống phân tích bỏ qua và được xuất ra một cách trực tiếp. Các biến được xác định bằng cách thêm vào trước một dấu đô la ($) và không cần xác định trước kiểu dữ liệu. Không giống với tên hàm và lớp, tên biến là trường hợp nhạy cảm. Cả dấu ngoặc kép ("") và ký hiệu đánh dấu văn bản (<<<EOF EOF;) đều có thể dùng để truyền xâu và giá trị biến.PHP coi xuống dòng như một khoảng trắng theo kiểu như một ngôn ngữ dạng tự do (free-form language) (trừ khi nó nằm trong trích dẫn xâu), và các phát biểu được kết thúc bởi một dấu chấm phẩy.PHP có ba kiểu cú pháp chú thích: /* */ cho phép một đoạn chú thích tùy ý, trong khi đó // và # cho phép chú thích trong phạm vi một dòng.Phát biểu echo là một trong những lệnh của PHP cho phép xuất văn bản (vd. ra một trình duyệt web). Về cú pháp các từ khóa và ngôn ngữ, PHP tương tự hầu hết các ngôn ngữ lập trình bậc cao có cú pháp kiểu C. Các phát biểu điều kiện If (Nếu), vòng lặp for và while, các hàm trả về đều tương tự cú pháp của các ngôn ngữ như C, C++, Java và Perl. 4.1.2 JavaScript 4.1.2.1 JavaScript là gì? JavaScript được thiết kế để thêm tương tác cho các trang HTML. Một ngôn ngữ lập trình kịch bản là 1 ngôn ngữ lập trình nhẹ. JavaScript thường được nhúng trực tiếp vào trong các trang HTML. JavaScript là 1 ngôn ngữ thông dịch(interpreted language)-có nghĩa là các script thực thi mà không có sự biên dịch sơ bộ. 4.1.2.2 JavaScript có thể làm gì ? JavaScript cung cấp cho các nhà thiết kế HTML 1 công cụ lập trình - các tác giả viết HTML thường không phải là các lập trình viên, nhưng JavaScript là 1 ngôn ngữ kịch bản với cấu trúc rất đơn giản! Hầu như bất cứ ai cũng có thể đặt 1 đoạn code nhỏ vào trong trang HTML của họ. JavaScript có thể đặt các đoạn text động vào trong 1 trang HTML - Một chỉ thị JavaScript như sau: document.write("<h1>" + name + "</h1>") có thể viết 1 biến text vào 1 trang HTML. JavaScript có thể phản ứng với các sự kiện . JavaScript có thể thiết lập thực thi khi có 1 việc gì đó xảy ra, như khi 1 trang đã được load xong hoặc khi người dùng click vào 1 phần tử HTML. JavaScript có thể đọc và viết các phần tử HTML(HTML elements). JavaScript có thể đọc và thay đổi nội dung của 1 phần tử HTML. JavaScript có thể được sử dụng để ràng buộc dữ liệu(validate data) . JavaScript có thể được sử dụng để ràng buộc dữ liệu của form trước khi nó được gửi đến server. JavaScript có thể sử dụng để nhận biết trình duyệt của người truy cập. JavaScript có thể được sử dụng để nhận biết trình duyệt của người truy cập, và - tùy thuộc vào trình duyệt - tải một trang khác được thiết kế đặc biệt cho trình duyệt. JavaScript có thể được sử dụng để tạo các cookie . Một mã JavaScript có thể được sử dụng để lưu trữ và lại thông tin trên máy tính của người truy cập . 4.1.2.3 Đối tượng trong javascript Kiểu của JavaScript được chia ra làm hai loại: kiểu cơ bản và đối tượng. Đối tượng trong JavaScript là một thực thể có tên xác định và có thuộc tính trỏ đến giá trị, hàm hoặc cũng có thể là một đối tượng khác. Có nghĩa là, đối tượng trong JavaScript là một mảng kết hợp (associative array) tương tự như mảng trong PHP hay từ điển trong Python JavaScript có một số đối tượng định nghĩa sẵn, bao gồm mảng (Array), đối tượng đại số Bool (Boolean), đối tượng ngày tháng (Date), đối tượng hàm (Function), đối tượng toán học (Math), đối tượng số (Number), đối tượng đối tượng (Object), đối tượng biểu thức tìm kiếm (RegExp) và đối tượng chuỗi ký tự (String). Các đối tượng khác là đối tượng thuộc phần mềm chủ (phần mềm áp dụng JavaScript - thường là trình duyệt). Ví dụ: function samplePrototype() { this.attribute1 = "someValue"; // thêm một thuộc tính cho đối tượng this.attribute2 = 234; // thêm thuộc tính nữa cho đối tượng this.function1 = testFunction; // thêm một hàm vào đối tượng } function testFunction() { alert(this.attribute2); //hiển thị 234 } var sampleObject = new samplePrototype; // khởi tạo một đối tượng sampleObject.function1(); // gọi hàm function1 của đối tượng sampleObject sampleObject.attribute3 = 123; // thêm một thuộc tính nữa cho đối tượng sampleObject delete sampleObject.attribute1; // xóa bỏ 1 thuộc tính delete sampleObject; // xóa bỏ đối tượng 4.1.2.4 Hàm trong javascript Hàm là một khối các câu lệnh với một danh sách một hoặc nhiều đối số (có thể không có đối số) và thường có tên (mặc dù trong JavaScript hàm không nhất thiết phải có tên). Hàm có thể trả lại một giá trị. Cú pháp của hàm như sau: function tên_hàm(đối_số_1, đối_số_2) { các câu lệnh cần thực hiện mỗi khi hàm được gọi; return giá_trị_cần_trả_về; } tên_hàm(1, 2); // Gọi hàm tên_hàm với hai đối số 1 và 2 ứng với đối_số_1 và đối_số_2 tên_hàm(1); // Gọi hàm tên_hàm với đối_số_1 có giá trị 1, đối_số_2 có giá trị undefined Trong JavaScript, khi gọi hàm không nhất thiết phải gọi hàm với cùng số đối số như khi định nghĩa hàm, nếu số đối số ít hơn khi định nghĩa hàm, những đối số không được chuyển cho hàm sẽ mang giá trị undefined. Các kiểu cơ bản sẽ được chuyển vào hàm theo giá trị, đối tượng sẽ được chuyển vào hàm theo tham chiếu. Hàm là đối tượng hạng nhất trong JavaScript. Tất cả các hàm là đối tượng của nguyên mẫu Function. Hàm có thể được tạo và dùng trong phép toán gán như bất kỳ một đối tượng nào khác, và cũng có thể được dùng làm đối số cho các hàm khác. Do đó, JavaScript hỗ trợ hàm cấp độ cao . Gọi Hàm: Ban đầu khi bạn không gọi hàm thì hàm sẽ không hoạt động, có nghĩa là tất cả những gì bên trong nó sẽ không được thực hiện khi Javascript load. Vì thế ta cần có thao tác gọi nó lên để những hành động trong nó được thực hiện.Rất đơn giản bạn chỉ cần ghi lại tên hàm mà thôi . Ví dụ: function goiham(){document.write ("Chào mọi người");document.writeln("Chào mọi người");} goiham() Các hàm có sẵn EVAL Cú pháp: returnval=eval (bất kỳ biểu thức hay lệnh hợp lệ trong Java) PARSEINT Cú pháp parseInt (string, [, radix]) PARSEFLOAT Cú pháp parseFloat (string) VD: \ perseInt Exemple document.write("Converting 0xC hex to base-10: " + parseInt(0xC,10) + ""); document.write("Converting 1100 binary to base-10: " + parseInt(1100,2) + ""); 4.1.3 Phần mềm hỗ trợ thiết kế web Macromedia Dreamweaver 8 Macromedia Dreamweaver 8 là trình biên soạn HTMl chuyên nghiệp dùng để thiết kế, viết mã và phát triển website cùng các trang web và các ứng dụng web. Cho dù bạn có thích thú với công việc viết mã HTML thủ công hoặc bạn thích làm việc trong môi trường biên soạn trực quan, Dreamweaver cung cấp cho bạn những công cụ hữu ích để nâng cao kinh nghiệm thiết kế web của bạn. Hướng dẫn này giới thiệu cho bạn cách sử dụng Macromedia Dreamweaver 8 nếu bạn chưa quen với các khía cạnh chính của nó. Những bài hướng dẫn trong mục hướng dẫn này dẫn bạn qua các quá trình tạo một website đơn giản nhưng đầy đủ chức năng. Các tính năng biên soạn trực quan trong Dreamweaver cho phép bạn tạo nhanh các trang web mà không cần các dòng mã. Bạn có thể xem tất cacr các thành phần trong website của bạn và kéo chúng trực tiếp từ một panel dễ sử dụng vào 1 văn bản. Bạn có thể nâng cao sản phẩm của bạn bằng cách tạo và sửa các ảnh trong Macromedia Fireworks hoặc trong ứng dụng ảnh khác, rồi sau đó chèn trực tiếp vào Dreamweaver. Dreamweaver cũng cung cấp những công cụ giúp đơn giản hóa việc chèn Flash vào trang web. Bên cạnh những tính năng kéo và thả giúp xây dựng trang web của bạn, Dreamweaver còn cung cấp một môi trường viết mã đầy đủ chức năng bao gồm các công cụ viết mã (như tô màu mã, bổ sung thẻ tag, thanh công cụ mã và thu bớt mã) và nguyên liệu tham chiếu ngôn ngữ trong Cascading Style Sheets (CSS), JavaScript, ColdFusion Markup Language (CFML) và các ngôn ngữ khác. Công nghệ Macromedia Roundtrip HTML nhập các văn bản HTML viết mã thủ công mà không định dạng lại mã; khi đó bạn có thể định dạng lại mã với phong cách định dạng của riêng bạn. Dreamweaver cũng cho phép bạn xây dựng các ứng dụng web động dựa theo dữ liệu sử dụng công nghệ máy chủ như CFML, ASP.NET, ASP, JSP, và PHP. Nếu sở thích của bạn là làm việc với dữ liệu XML, Dreamweaver cung cấp những công cụ cho phép bạn dễ dàng tạo các trang XSLT, chèn file XML và hiển thị dữ liệu XML trên trang web của bạn. Dreamweaver có thể tùy biến hoàn toàn. Bạn có thể tạo cho riêng mình những đối tượng và yêu cầu, chỉnh sửa shortcut bàn phím và thậm chí viết mã JavaScript để mở rộng những khả năng của Dreamweaver với những hành vi mới, những chuyên gia giám định Property mới và những báo cáo site mới. 4.1.4 Giới thiệu về AppServ AppServ là dự án tích hợp, cài đặt nhanh chóng, đơn giản các mô phỏng máy chủ web như Apache, PHP, MySQL... trên nền hệ điều hành Windows – rất thuận tiện cho việc nghiên cứu, phát triển và kiểm tra các ứng dụng web lập trình bằng PHP. Ưu điểm : gọn nhẹ , tương thích cao & đầy đủ các chức năng để chạy PHP ! AppServ bao gồm :Webserver Apache, PHP, MySQL, PHPMyAdmin. 4.2 Bảo mật web trong lập trình trong PHP 4.2.1Giới thiệu bảo mật Trước khi khảo sát các kiểu tấn công và làm thế nào để phát hiện và bảo vệ trước mỗi cuộc tấn công? Nó là cần thiết để thiết lập các nguyên lý bảo mật cơ bản cho web. Các nguyên lý này không khó để có thể hiểu được nhưng nó yêu cầu có sự chú tâm(mindset) đến dữ liệu. Sự chứ tấm đến bảo mật nghĩa là bạn phải coi tất cả dữ liệu là hỏng(không hoàn toàn đúng yêu cầu) và dữ liệu đó phải được lọc trước khi sử dụng hoặc đưa ra ngoài hoặc khi xoá bỏ dữ liệu khỏi dụng. Hiểu và làm theo nó là cơ sở và bản chất bảo mật cho ứng dụng của bạn. 4.2.1.1 Tất cả dữ liệu nhập là “không an toàn” Có lẽ quan trọng nhất trong mọi giao dịch là sự tin cậy vào dữ liệu. Bạn chắc chắn tất cả dữ liệu sử lý của bạn là an toàn? trả lời câu hỏi đó rất dễ nếu bạn biết nguồn gốc dữ liệu. Nếu dữ liệu của bạn bắt đầu từ bên ngoài như từ form nhập dữ liệu, chuỗi truy vấn hay thậm chí từ RSS nó không phải là dữ liệu an toàn nó là dữ liệu “không an toàn”. Dữ liệu từ nguồn này và các nguồn khác là “Chưa an toàn” bơỉ vì nó không chắc chắn, nội dung của nó chứa các kí tự nguy hiểm cho hệ thống. Ví dụ chuỗi truy vấn user có thể thay đổi bằng tay và thêm vào đó các thẻ javascipt kết quả có thể dẫn đến có hại cho hệ thống một quy tắc chung nhất của tất cả các biến mảng toàn cục(superglobals) lên cân nhắc kỹ khả năng “Chưa an toàn” . Đây là lý do cho tất cả hoặc một vài các mảng superglobals khi nhận dữ liệu từ bên ngoài. Thậm chí $_SERVER không phải luôn an toàn bởi một vài dữ liệu cung cấp từ client. Một trường hợp ngoại lệ với nguyên tắc này, cái chỉ được chạy trên server . Trước khi sử lý dữ liệu “Chưa an toàn” trước khi sử dụng chúng thì phải lọc chúng, một dữ liệu được lọc sau đó nó an toàn với người sử dụng. Có hai cách tiếp cận lọc dữ liệu: whitelist và Blacklist . 4.2.1.2 Lọc Whitelist và Blacklist Có 2 phương pháp tiếp cận phổ biến Whitelist và Blacklist. Phương pháp tiếp cận blacklist ít hạn chế hơn trong quá trình lọc dữ liệu và có thể hiểu rằng lập trình viên có thể biết mọi thứ và không cho phép dữ liệu này đi qua - Ví dụ: một vài diễn đàn lọc các từ thô tục sử dụng blacklist. Đó là những từ không thích hợp với diễn đàn những từ này bị lọc ra khỏi bài viết cong những từ khác không có trong danh sách cho phép hiện ra. Tuy nhiên cần thêm vào danh sách các từ bị cấm trong khoảng thời gian. Ví dụ này không liên quan trực tiếp đến chủ đề trực tiếp để lập trình viên giảm thiểu sự tấn công nhưng nó nêu ra vấn đề tồn tại của cách sử dụng Blacklist là: blacklist phải sửa đổi cập nhật liên tục, phải mở rộng khi gặp kiểu tấn công mới. Cách khác dùng whilelist có nhiều hạn chế hơn cho người dùng, chỉ cung cấp khả năng người dùng chấp nhận. Thay vì phải kiểm tra có chấp nhận được hay không whilelist chỉ cung cấp duy nhất dữ liệu chấp nhận được. Thông tin này đã sẵn sàng khi bạn phát triển ứng dụng, nó có thể phát triển trong tương lai. Nhưng bạn điều khiển các thông tin này bằng những tham số. Khi bạn điều khiển dữ liệu mà nó được chấp nhận thì các kẻ tấn công không thể chuyển cho bất kỳ khác ngoài whilelist cho phép. Vì lý do đó whilelist bảo vệ mạnh mẽ hơn Blacklist. 4.2.1.3 Lọc dữ liệu đầu vào (Filter Input) Từ những dữ liệu không chắc an toàn bạn không thể tin tưởng được , nó là cần thiết để lọc dữ liệu nhập. Ví dụ sử dụng whilelist trong form sau:   Username:   Password:   Favourite colour:    Red Blue Yellow  Green      Trên form có ba phần tử: username, password và color trong đó giới hạn tên chỉ lên là các chữ cái, còn mật khẩu yêu cầu có cả chữ cái và số và màu chỉ hiển thị enable Red và Blue. Chúng ta có thể dùng javascript để giới hạn hiển thị màu. Người dùng chi có thể gửi thông tin giới hạn trong form điều đó cực kỳ quan trọng trong bảo mật cho site. Lọc dữ liệu nhập từ form, bắt đầu bằng khởi tạo một mảng trắng nó chứa các phần tử dữ liệu đã được lọc . Khi nào gặp biến này $clean[’username’], bạn xác đinh rằng biến này đã được lọc. Tuy nhiên bạn có thể sử dụng $_POST[’username’] tuy nhiên bạn không thể khẳng định rằng dữ liệu này có thể chấp nhận được. Loại bỏ các biến và sử dụng $clean thay thế . Ví dụ: $clean = array();  if (ctype_alpha($_POST[’username’])) {  $clean[’username’] = $_POST[’username’]; } if (ctype_alnum($_POST[’password’])) {  $clean[’password’] = $_POST[’password’]; } $colours = array(’Red’, ’Blue’, ’Yellow’, ’Green’);  if (in_array($_POST[’colour’], $colours)) {  $clean[’colour’] = $_POST[’colour’]; } Việc sử dụng whilelist phải đảm bảo chắc chắc bạn không nhận được dữ liệu xấu. Ví dụ : một ai đó cố gắng nhập vào username và color không cho phép sử lý. Điều tồi tệ xẩy ra là $clean không chứa giá trị username và color, nếu user name được yêu cầu một mẩu tin báo lỗi sẽ hiện lên yêu cầu nhập dữ liệu đúng. bạn cần phải bắt buộc người dùng nhập vào thông đúng hơn là cố gắng lọc dữ liệu. nếu bạn cố lọc dữ liệu bạn cần có những kết luận về những dữ liệu xấu, nó gặp số vấn đề khi sử dụng với blacklist 4.2.1.4 Escape Output Output là lấy dữ liệu của ứng dụng hiển thị trên client – Client yêu cầu load web từ một web Browser tới web server, web server thực thi bằng cách truy cập CSDL lấy dữ liệu. dữ liệu lấy ra và lọc, bạn cần chánh khỏi tất cả các dữ liệu làm vỡ dữ liệu. Việc lọc Escape Output để bảo vệ client và người dùng những lệnh có hại tiềm tàng, Escape Output hiểu nó như một phần của như bộ lọc dữ liệu, hai cái đều quan trọng như nhau, bộ lọc để chắc chắn rằng tính hợp lệ của dữ liệu nhập cho ứng dụng còn , tránh khỏi những nguy cơ tấn công có hại cho hệ thống. CSDL server khi làm việc gặp các kí tự đặc biệt. Từ trình duyệt các kí tự là các thẻ HTML đối với database Server là các kí tự đánh dấu quote và các câu lênh SQL làm thế nào khi ouput nó hiểu đúng. Để sử lý escape output cho web browser PHP cung cấp hàm htmlspecialchars() và hàm htmlentities() được đề nghị để sử lý chức năng này. Ví dụ sau đây sẽ sử dụng htmlentities() để minh hoạ sử lý dữ liệu trước khi gửi đến browser Ví dụ: $html = array();  $html[’message’] = htmlentities($user_message, ENT_QUOTES, ’UTF-8’);  echo $html[’message’];  Escape output dành cho database server như cấu trúc các lệnh truy vấn ta sử dụng các hàm *_escape_string() . Từ PHP 5.x bao gồm PHP Data Objects (PDO), bạn có thể sử dụng prepared statements cho tất cả các CSDL bằng trình điều khiển PDO.  Sử dụng chuẩn bị dữ liệu trong cấu trúc giúp bạn chỉ rõ nơi quan trọng trong câu lệnh SQL và có thể sử dụng nhiều lần trong một lần khai báo và thay thế giá trị trong mỗi thời gian. Ví dụ đơn giản để kết nối tham số: // First, filter the input  $clean = array();  if (ctype_alpha($_POST[’username’])) {  $clean[’username’] = $_POST[’username’]; } // Set a named placeholder in the SQL statement for username  $sql = ’SELECT * FROM users WHERE username = :username’;  // Assume the database handler exists; prepare the statement  $stmt = $dbh->prepare($sql);  // Bind a value to the parameter  $stmt->bindParam(’:username’, $clean[’username’]);  // Execute and fetch results  $stmt->execute();  $results = $stmt->fetchAll(); 4.2.1.5 Đăng kí biến toàn cục(Register Globals) Khi the re

Các file đính kèm theo tài liệu này:

  • docXây dựng website giới thiệu và bán thực phẩm.doc
Tài liệu liên quan