Bài giảng Lập trình mạng - Chương 5: Lập trình Web CGI

Hệ thống WWW tĩnh:

Tập hợp các trang HTML

Không tương tác được với user

Khó khăn trong việc cập nhật thông tin thường xuyên.

Ứng dụng web:

Có thể tương tác với user.

Có thể tương tác với các ứng dụng khác.

 

 

ppt111 trang | Chia sẻ: NamTDH | Lượt xem: 1221 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Lập trình mạng - Chương 5: Lập trình Web CGI, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
– Chương 7 * 7.1 Giới thiệu ngôn ngữ XML Truy xuất các phần tử trong file XML: Có thể sử dụng bất cứ ngôn ngữ lập trình trên các platform khác nhau. Các cách truy xuất đã được W3C(www.w3c.org) định nghĩa Document Object Model(DOM) XPointer XML StyleSheet Language(XSL) XML Query Language(XQL) … Lập trình mạng – Chương 7 * 7.2 XML trong các ứng dụng mạng Định nghĩa các format dữ liệu để trao đổi: Cấu trúc file XML với DTD hay XML Schema quy định về protocol giao tiếp. Dữ liệu được biểu diễn theo các tag. Là môi trường để các hệ thống không đồng nhất có thể giao tiếp với nhau. Hệ thống cho phép mở rộng nhiều đối tượng tham gia, mở rộng giao dịch mà không ảnh hưởng đến các giao dịch cũ. Có thể truyền qua giao thức HTTP Lập trình mạng – Chương 7 * 7.2 XML trong các ứng dụng mạng Ví dụ mô hình giao dịch ngân hàng: Lập trình mạng – Chương 7 * 7.2 XML trong các ứng dụng mạng Các công nghệ dựa trên XML được sử dụng hiện nay: Simple Object Access Protocol(SOAP) Các dữ liệu XML được truyền qua giao thức HTTP như một đối tượng. Web services Chuẩn XML được hỗ trợ để truyền giữa các ứng dụng web để trao đổi dữ liệu. Microsoft .NET Framework Lập trình mạng – Chương 7 * 7.3 Một số ví dụ import org.apache.xerces.parsers.DOMParser; import org.apache.xml.serialize.*;import org.w3c.dom.*; import org.xml.sax.*; private Document document; private Node root; private DOMParser parser = new DOMParser(); try { //pre-parse ByteArrayInputStream input = new ByteArrayInputStream(inBuffer); parser.setFeature(""+ "features/dom/include-ignorable-whitespace",false); parser.parse(new InputSource(input)); document=parser.getDocument(); //Set DOCTYPE for input document OutputFormat format=new OutputFormat(); format.setDoctype(null,"requestInformation.dtd"); Lập trình mạng – Chương 7 * ByteArrayOutputStream output = new ByteArrayOutputStream(); XMLSerializer serial =new XMLSerializer(output,format); serial.serialize(document); inBuffer = output.toByteArray(); //real-parse input = new ByteArrayInputStream(inBuffer); parser.reset(); parser.parse(new InputSource(input)); document=parser.getDocument(); root = this.document.getDocumentElement(); //Get information Node cardNumberNode = root.getFirstChild(); cardNumber = cardNumberNode.getFirstChild().getNodeValue(); cardNumber = this.cardNumber.trim(); }catch (Exception e){} Lập trình mạng – Chương 8 * CHƯƠNG 8: BẢO MẬT DỮ LIỆU TRUYỀN TRÊN MẠNG 8.1 Các vấn đề về bảo mật dữ liệu 8.2 Các phương pháp mã hóa dữ liệu 8.3 Ví dụ mã hóa trong Java. Lập trình mạng – Chương 8 * 8.1 Các vấn đề về bảo mật dữ liệu Secrecy: Thông tin truyền đi chỉ được phần tử gởi và nhận đọc mà thôi. Authentication: Xác định đúng đối tác trước khi thực hiện một giao dịch trên mạng. Non-repudiation: Chứng minh được chính đối tác đã gởi thông tin. Integrity control: Thông tin truyền đảm bảo không bị thêm bớt trong quá trình truyền Lập trình mạng – Chương 8 * 8.1 Các vấn đề về bảo mật dữ liệu Các nguy cơ tính bảo mật bị đe dọa: Thông tin bị đánh cắp: NIC card có thể lấy các thông tin không phải của máy mình Lập trình mạng – Chương 8 * 8.1 Các vấn đề về bảo mật dữ liệu Các nguy cơ tính bảo mật bị đe dọa(tt): Thông tin giả mạo Chương trình giả mạo phần tử gởi để gởi cho phần tử nhận ( C giả mạo B gởi cho A) Lập trình mạng – Chương 8 * 8.1 Các vấn đề về bảo mật dữ liệu Nguy cơ tấn công DOS (Denial of service) Tấn công bằng cách gởi nhiều message để làm tê liệt hệ thống Lập trình mạng – Chương 8 * 8.2 Các phương pháp mã hóa dữ liệu Bảo mật bằng cách mã hóa (cryptography) dữ liệu trước khi truyền. Các phương pháp mã hóa: Mã hóa đối xứng, giải thuật bí mật (private key) Giải thuật khóa công khai (public key) Lập trình mạng – Chương 8 * 8.2 Các phương pháp mã hóa Lập trình mạng – Chương 8 * 8.2 Các phương pháp mã hóa Các vấn đề cần quan tâm trong hiện thực mã hoá: Giải thuật mã hóa (cryptography algorithm) Giao thức mã hóa (cryptography protocol) Quản lý khóa (key management) Lập trình mạng – Chương 8 * 8.2 Các phương pháp mã hóa Các giải thuật mã hóa đơn giản: Thay thế một ký tự bằng một ký tự hay nhóm ký tự khác: Ví dụ: Hoán vị thứ tự các ký tự theo một quy tắc plaintext: abcdefghijklmnopqrstuvwxyz ciphertext: mnbvcxzasdfghjklpoiuytrewq Plaintext: bob. i love you. alice ciphertext: nkn. s gktc wky. mgsbc Lập trình mạng – Chương 8 * 8.2 Các phương pháp mã hóa Phương pháp mã hóa khoá bí mật: Giải thuật DES: Data Encryption Standard US encryption standard [NIST 1993] 56-bit symmetric key, 64 bit plaintext input Lập trình mạng – Chương 8 * 8.2 Các phương pháp mã hóa Phương pháp mã hóa khóa công khai (public key): Lập trình mạng – Chương 8 * 8.2 Các phương pháp mã hóa Giải thuật RSA (Rivest, Shamir, Adelson) cho giải thuật mã hóa khóa công khai Chọn hai số nguyên tố p,q liền nhau Tính n = p.q, z = (p-1)(q-1) Chọn e<n là không có thừa số chung với z Chọn d sao cho ed mod z = 1 Khóa công khai là (n,e). Khoá bí mật là (n,d). Lập trình mạng – Chương 8 * 8.2 Các phương pháp mã hóa Giải thuật RSA(tt) Với mẫu bit m muốn gởi, tính c = me mod n và gởi c Bên nhận nhận được mẫu bit c, tính ra m = cd mod n Lập trình mạng – Chương 8 * Lập trình mạng – Chương 8 * 8.3 Ví dụ mã hóa trong Java. import java.security.*; import java.security.spec.*; import java.security.interfaces.*; import javax.crypto.*; import javax.crypto.spec.*; import javax.crypto.interfaces.*; import com.sun.crypto.provider.SunJCE; //… SunJCE jce = new SunJCE(); Security.addProvider(jce); System.out.println("BANK SERVER receives Client's public key"); byte[] clientPubKeyEnc = SocketUtil.receive(in); KeyFactory serverKeyFac = KeyFactory.getInstance("DH"); X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(clientPubKeyEnc); PublicKey clientPubKey = serverKeyFac.generatePublic(x509KeySpec); DHParameterSpec dhParamSpec = ((DHPublicKey)clientPubKey).getParams(); System.out.println("SERVER: Generate DH keypair with Client ..."); KeyPairGenerator serverKeyPairGen = KeyPairGenerator.getInstance("DH"); serverKeyPairGen.initialize(dhParamSpec); KeyPair serverKeyPair = serverKeyPairGen.generateKeyPair(); Lập trình mạng – Chương 8 * 8.3 Ví dụ mã hóa trong Java. System.out.println("BANK SERVER: Initialize KeyAgreement with Client..."); KeyAgreement serverKeyAgree = KeyAgreement.getInstance("DH"); serverKeyAgree.init(serverKeyPair.getPrivate()); byte[] serverPubKeyEnc = serverKeyPair.getPublic().getEncoded(); SocketUtil.send(out,serverPubKeyEnc); serverKeyAgree.doPhase(clientPubKey, true); byte[] serverSharedSecret = serverKeyAgree.generateSecret(); System.out.println("BANK SERVER's Secret-Key with WebSiteClient : "+ CipherUtil.toHexString(serverSharedSecret)); serverKeyAgree.doPhase(clientPubKey, true); SecretKey serverDesKey = serverKeyAgree.generateSecret("DES"); Cipher serverCipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); Mac serverMac = Mac.getInstance("HmacSHA1"); serverMac.init(serverDesKey); Lập trình mạng – Chương 8 * 8.3 Ví dụ mã hóa trong Java. //Bank Server receives encrypted-data and Mac-code from Client byte[] cipherTextBefore = SocketUtil.receive(in); byte[] textMacBefore = SocketUtil.receive(in); //Bank Server decrypts encrypted-data and //computes received-data's Mac-code serverCipher.init(Cipher.DECRYPT_MODE, serverDesKey); byte[] recoveredText = serverCipher.doFinal(cipherTextBefore); byte[] textMacBeforePre = serverMac.doFinal(recoveredText); //Bank Server process data BankProcess bankPro; if(java.util.Arrays.equals(textMacBefore, textMacBeforePre)) { System.out.println("Data received from WebSiteClient is valid"); bankPro = new BankProcess(recoveredText,false);//no have error } Lập trình mạng – Chương 8 * 8.3 Ví dụ mã hóa trong Java. else{ System.out.println("Data received is NOT valid"); } byte[] result = bankPro.getResult(); //Server encrypts result and computes its Mac-code serverCipher.init(Cipher.ENCRYPT_MODE, serverDesKey); byte[] cipherTextAfter = serverCipher.doFinal(result); byte[] textMacAfter = serverMac.doFinal(result); //Server sends encrypted-result and Mac-code to client SocketUtil.send(out,cipherTextAfter); SocketUtil.send(out,textMacAfter); //… Dùng các packages JCE1.2.1 của Java

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

  • pptch05_08_2__3222.ppt
Tài liệu liên quan