itprofes
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Ngôn Ngữ Web và Các Vấn Đề Bảo Mật

Go down

Ngôn Ngữ Web và Các Vấn Đề Bảo Mật Empty Ngôn Ngữ Web và Các Vấn Đề Bảo Mật

Bài gửi  admin 1/4/2010, 11:50 am

web trích thông tin của một người dùng khi nhận tên đăng nhập và mật
khẩu của người đó, bằng cách cung cấp thông tin đặc biệt đánh lừa hệ
thống, người dùng có thể trích thông tin của tất cả các user khác.




<form
action> - Thuộc tính Action. Ta dùng thuộc tính này để chỉ định một
trình thực thi trên web server cho đối tượng form. Ví dụ: <form
action = "/login.cgi"> ... Khi biết được tên chương trình, ta có thể
tìm hiểu thêm các thông tin có giá trị về web server, về thư mục hiện
hành của chương trình.


<form method> - Phương thức của
form, định nghĩa cách thức dùng để gửi thông tin người dùng nhập vào đến
web server cho chương trình xử lý. Khi hiểu được cách thức gửi thông
tin (POST và GET), hacker có thể theo dõi và bắt các thông tin đựơc gửi
trên mạng, thậm chí có thể thay đổi chúng và gửi đi với giá trị khác để
tạo ra những kết quả khó lường.



<script
language=<variable>>: Biến truyền vào là ngôn ngữ script phía
client, chẳng hạn như: javascript, vbscript, XML.. Khi thay đổi loại
ngôn ngữ, hacker có thể vượt qua các bộ lọc kiểm tra.








<input>
- Edit control để nhập thông tin. Nếu ứng dụng web không xử lý tốt các
thông tin nhập vào, hacker có thể lợi dụng nhập vào các giá trị đặc biệt
đánh lừa hệ thống và tạo nên những kết quả không mong muốn. Những giá
trị username và password dùng trong kĩ thuật SQL Injection là ví dụ điển
hình.







<input type=hidden> - Kiểu
đối tượng input. Một số trang web dùng đối tượng input với thuộc tính
hidden để chứa giá trị định trước như giá mua hàng ở các trang shopping
card. Lợi dụng đặc điểm này, hacker có thể thay đổi giá trị này thành
giá trị mong muốn và gửi đến web server. Ở các trang web buôn bán, nếu
không có những xử lý giá trị phía server, hacker có thể mua được những
món hàng với giá giảm đáng kể.








<input
maxlength=<variable>>: Giá trị maxlength xác định chiều dài
của giá trị nhập vào đối tượng input. Hacker có thể thay đổi giá trị
maxlength cho phép nhập vào những giá trị hoặc chuỗi rất dài. Nếu chúng
không được xử lý thích hợp, chúng có thể gây nên những lỗi như tràn bộ
đệm, thậm chí có thể làm hỏng web server.





<input
size=<variable>>: Tương tự như giá trị maxlength.





<applet>
- Java applet. Thuộc tính này dùng để hiện và chạy thẻ java applet.
Java chạy và gửi thông tin thường dưới dạng plain text nên có thể dùng
các chương trình theo dõi gói tin để bắt các thông tin này. Java
byte-code có thể dịch ngược để xem mã nguồn.






<object>
Thuộc tính này dùng để thể hiện các đối tượng ActiveX và Java applet.
Lợi dụng thuộc tính này, hacker có thể gửi email có nhúng HTML và đánh
lừa người dùng chạy các ActiveX control có thể đoạt quyền điều khiển hệ
thống. Đây cũng là một trong những cách tốt nhất người ta lợi dụng để
lan truyền virus trên mạng.





<embed> Thuộc
tính này được dùng phối hợp với thẻ <object> để nhúng các đối
tượng ActiveX...





2. DHTML (Dynamic HTML)




DHTML
là phiên bản mở rộng của HTML có phần mở rộng dạng .dhtml. Nó giúp tăng
cường tính tương tác của các đối tượng điều khiển trong trang HTML tĩnh
bằng cách cho phép người ta dùng các script vbscript hoặc javascript
điều khiển chúng. Ví dụ một thẻ image để nhúng ảnh vào trang web có thể
nhận biết khi nào người dùng di chuyển chuột trên nó bằng cách cài đặt
hàm xử lý sự kiện OnMouseOver, khi đó thông qua những xử lý thích hợp sẽ
làm đối tượng hình ảnh trở nên sống động hơn. Nhìn chung, bên cạnh
những mở rộng như tạo những hiệu ứng MouseOver, chuỗi chữ di chuyển
động, thay đổi màu sắc..., các khía cạnh bảo mật của DHTML tương tự như
HTML vì nó dựa trên nền tảng HTML. Tuy nhiên hiện nay các lập trình viên
web ít chọn DHTML vì có một số trình duyệt không hỗ trợ tốt cho nó,
điển hình như Netscape.







3. XML
(Extensible Markup Language) - Ngôn ngữ đánh dấu mở rộng



Ngôn
ngữ XML mới phát triển trong thời gian gần đây và có thể sẽ được phổ
biến rộng rãi trong tương lai, chẳng hạn như ở các ngôn ngữ .NET. Không
giới hạn và định nghĩa sẵn như HTML, XML cho phép người dùng tự định
nghĩa ra các thành phần riêng và mở rộng tuỳ ý. Tệp dữ liệu XML có phần
mở rộng dạng .xml.



Bộ phận quan trọng nhất trong ngôn ngữ
XML là bảng định nghĩa DTD (Document Type Definitions). DTD dùng để
định nghĩa các thẻ mở và đóng của một tệp XML, giúp người xem có một cái
nhìn tổng quát về dữ liệu đang lưu trữ.



Ví dụ ta cần
định nghĩa cấu trúc dữ liệu Danh Sách Sinh Viên, ta tạo một tệp DTD
dssv.dtd như sau:








<!ELEMENT DSSV
(SV*)>



<!ELEMENT SV(MASV, TEN, NS, LOP*)>



<!ELEMENT
MASV(#PCDATA)>



<!ELEMENT TEN(#PCDATA)>



<!ELEMENT
NS(#PCDATA)>




<!ELEMENT LOP(#PCDATA)>







Đây
là ví dụ dữ liệu trong tệp XML:







<?xml
version="1.0" ?>



<!DOCTYPE DSSV PUBLIC "."
"dssv.dtd">




<DSSV>



<SV>



<MASV>95001</MASV>



<TEN>W_Hat</MASV>



<NS>19/11/1077</MASV>




<LOP>TH95</MASV>



</SV>



<SV>



.....



</SV>




</DSSV>







Dữ
liệu trên thể hiện thông tin của một sinh viên với mã số, tên, ngày
sinh và lớp. Kí hiệu * nằm sau SV và LOP chỉ định dữ liệu có thể chứa
nhiều sinh viên, mỗi sinh viên có thể có nhiều lớp.







4.
Perl (Pratical Extraction and Report Language)



Perl là
ngôn ngữ lập trình cấp cao được phát triển từ năm 1987. Rất mạnh, tiện
dụng và đồng thời là ngôn ngữ được phổ biến miễn phí, hỗ trợ cho hầu hết
các hệ thống từ Winđowsx/NT/2k/XP, các phiên bản biến thể của Unix đến
hệ thống AS/400, MacOS, Novell NetwarePerl...Perl đã và đang được sử
dụng rộng rãi hiện nay trên internet.




Perl được dùng
chủ yếu cho các xử lý phía server, tuy nhiên ta cũng có thể dùng perl để
viết các ứng dụng client, thậm chí có thể tạo nên ứng dụng chạy độc lập
để thực hiện một tác vụ tính toán nào đó.



Trên web
server, perl thường được thực thi với CGI tạo nên cơ chế xuất thông tin
ra trình duyệt web. Hãy xem ví dụ dùng perl để xử lý các thông tin nhập
vào từ người dùng trong đoạn html dưới đây:







<form
method=POST action="/admin/login.pl"></form>



<html>



Username:




<input
value="" size=80 maxlength=80 name="username">



Password:



<input
value="" size=80 maxlength=80 name="password">



<input
type=submit value="Login">



</html>








Sau
khi người dùng nhập tên, mật khẩu và nhấn nút Login những thông tin này
sẽ được gửi đến chương trình perl có tên login.pl nằm ở thư mục /admin/
trên web server. Chương trình login.pl sau khi xử lý sẽ gửi kết quả
ngược về web client.







Khi sử dụng perl để
thực hiện các xử lý phía server, ta cần lưu ý một số điểm quan trọng sau
có khả năng gây nên những nguy cơ về bảo mật nghiêm trọng:







a
- Tránh thực thi các web server dưới quyền quản trị (root trong Unix và
adminitrator trong Windows). Khi các script ở web server được chạy có
quyền quản trị sẽ rất nguy hiểm nếu ai đó dùng nó để thực hiện các lệnh
điều khiển hệ thống. Các bạn có thể thấy script cgi-telnet là một ví dụ
cụ thể.



b - Luôn thực hiện tiền xử lý các thông tin người
dùng nhập vào, như các giá trị tên người dùng, mật khẩu, giá cả...Tạo
một chuỗi các kí tự hợp lệ tương ứng với thông tin cần nhập và lọc ra
những kí tự được nhập không chính xác. Chẳng hạn với tên và mật khẩu
người dùng, ta có thể giới hạn ở các kí tự hợp lệ sau: "0..9", "a..z",
"A..Z"; không cho phép hoặc lọc bỏ các kí tự đặc biệt như:
"/\+)({}[]'-_=.|" ... Một ví dụ khác về việc dùng perl thực hiện tiền xử
lý với email người dùng, với yêu cầu email phải có kí hiệu @ và dấu
chấm "." ở ít nhất là phần sau dấu @:








if
($email !~ /^[\w-]+\@[\w.-]+$/)



{



print
"<br>#Error in your email. Please re-enter<br>";



}else




{



#
thực hiện xử lý đối với thông tin email hợp lệ;



}







c
- Hạn chế không cho phép thực thi các lệnh hệ thống (shell command) như
open(), fork(), system(), exec() hoặc cho thực hiện sau khi đã kiểm tra
chặt chẽ các tham số truyền vào. Ở các hệ thống bảo vệ lỏng lẻo, hacker
có thể lợi dụng truyền các tham số không thích hợp vào các hàm trên để
thực hiện các lệnh xem thông tin và điều khiển hệ thống.



d
- Trên các hệ thống Unix, cần thiết lập các thông số $PATH và $IFS bằng
các giá trị chính xác cụ thể, tránh dùng các biến môi trường.





dụ ta đặt như sau:







$ENV{"PATH"}="/bin:/usr/bin:/opt";



$ENV{"IFS"}="/";







Việc
chỉ định không rõ ràng các thông tin trên có thể tạo điều kiện cho
hacker sửa đổi chúng và bắt các chương trình của chúng ta phải thực thi
một chương trình nguy hiểm nào đó ở nơi khác thay vì tại vị trí ta mong
muốn.




e - Kiểm tra kích thước và chiều dài của các
thông tin người dùng nhập vào hoặc dùng biến $ENV{CONTENT_LENGTH} để hạn
chế chiều dài của chuỗi dữ liệu cho các yêu cầu GET/POST. Nếu không
được kiểm tra chính xác, hacker có thể gửi đi một lượng dữ liệu có giá
trị rất lớn hoặc rất dài có thể gây nên các lỗi tràn bộ đệm, hỏng web
server và thậm chí tìm được các điều kiện phát sinh lỗi tràn bộ đệm và
thực thi các lệnh nguy hiểm từ xa.



f - Tránh cho phép chỉ
định đường dẫn cụ thể ở các trường dữ liệu hoặc ở các tham số truyền
vào các chương trình. Chỉ nên cho phép các đường dẫn mang tính tương
đối, cắt bỏ các giá trị có dạng dot dot ".." hoặc slash "/\". Ở rất
nhiều chương trình web không kiểm tra đúng đã cho phép người dùng nhập
các tham số ví dụ như /../../../../etc/passwd (Unix) hoặc
/../../../winnt/repair/sam._ (NT/2k) và dễ dàng lấy được các thông tin
về mật khẩu.



g - Sử dụng khả năng taint checking của perl
để theo dõi và kiểm tra giá trị của các biến.



h - Các
chương trình perl được lưu trữ dưới dạng text đơn giản do đó có thể dễ
dàng bị xem mã nguồn và lấy các thông tin có giá trị khác tên, mật khẩu
truy cập cơ sở dữ liệu...nếu hacker đoạt được quyền điều khiển hệ thống
hoặc có quyền xem hệ thống file. Ta có thể dùng một số chương trình ví
dụ như perl2exe cho phép chuyển đổi các tệp perl dạng text sang dạng
chương trình thực thi .exe, như vậy có thể tránh được việc bị xem mã
nguồn và không còn cần trình thông dịch perl khi chạy.







5.
PHP (Personal Home Page)




Được phát triển từ năm 1995
và dần được bổ sung qua một số phiên bản, cho đến nay PHP trở thành một
trong những ngôn ngữ script phía server phổ biến nhất bên cạnh Perl và
ASP (Active Server Pages). Tương tự như Perl, PHP có dạng cú pháp, câu
lệnh đơn giản, dễ hiểu - đặc biệt thích hợp với các lập trình viên có
hiểu biết về ngôn ngữ C/C++ - đồng thời có ưu điểm là thực thi rất nhanh
và có thể chạy ở máy client hoặc như một ứng dụng độc lập. Hiện nay
người ta thường dùng PHP để thực hiện các tác vụ xử lý phía server ở các
web server trên nền Unix, điển hình như Apache. Các chương trình PHP
thường có phần mở rộng là .php, .php3, .php4; mã PHP cũng có thể nhúng
vào một trang HTML. Hãy xem ví dụ sau thực hiện in lên trình duyệt một
chuỗi kí tự:







<!-- PHP Example in HTML



<html>



<?php



echo
"<br>Hello World!<br>";




?>



</html>







Chú
ý thẻ <? và ?> dùng để đánh dấu nơi bắt đầu và kết thúc mã PHP.



Cho
đến nay, những điểm yếu của PHP được phát hiện tương tự như ở ngôn ngữ
Perl. Đặc biệt khi sử dụng PHP để nhận các thông tin nhập từ người dùng
thông qua trình duyệt và xử lý cơ sở dữ liệu bên dưới; hoặc thực thi các
lệnh hệ thống như system(), shellexec(), exec(), passthru()...ta cần
chú ý thực hiện việc kiểm tra và lọc những dữ liệu truyền vào không hợp
lệ để tránh trường hợp người dùng nhập dữ liệu sai, đánh lừa hệ thống
sinh ra những kết quả không mong muốn, thậm chí thực thi các lệnh từ xa.





dụ sau thực hiện việc kiểm tra đơn giản trên chuỗi $value có kiểu số,
dùng hàm định nghĩa sẵn preg_match():







if
(preg_match("/^[0-9]+$/i", $value))



echo "Invalid
number!\n";



return 1;



break;








Các
bạn tham khảo thêm các thông tin về PHP tại [url=http://www.gizlen.org/browse.php?u=Oi8vd3d3LnBocC5uZXQv&b=11]http://www.php.net/[/url]







6.
ColdFusion



ColdFusion (CF) là hệ thống phát triển ứng
dụng web của công ty Allaire ([url=http://www.gizlen.org/browse.php?u=Oi8vd3d3LmFsbGFpcmUuY29tLw%3D%3D&b=11]http://www.allaire.com[/url]) với phiên bản mới nhất hiện
nay là 5.0. CF có 3 thành phần chính bao gồm: Application Server,
Markup Language và Studio. Chúng ta sẽ tìm hiểu sơ lược qua từng thành
phần này.








Application Server (Máy chủ
ứng dụng) - Đây là thành phần chính của ColdFusion có thể chạy trên các
nền Windows và Unix. Application Server chạy trên web server và xử lý
các yêu cầu từ các trang mã ColdFusion.







Markup
Languge (CFML) - Là ngôn ngữ web phía server được phát triển tuân theo
quy ước HTML bao gồm các thẻ và thuộc tính của thẻ. CFML được dùng kết
hợp với Application Server tạo nên các các ứng dụng web như các shopping
card, quản lý tài khoản ngân hàng trực tuyến...Chương trình ColdFusion
có phần mở rộng bắt buộc là .CFM.



Tương tự như Perl và
PHP, các tệp CFM được lưu trữ ngầm định dưới dạng text đơn giản do đó
chúng có thể dễ dàng bị xem mã nguồn dẫn đến lộ những thông tin quan
trọng. Về mặt cấu trúc CFM giống như HTML ở chổ dùng các thẻ tag để thực
hiện hầu hết các tác vụ chẳng hạn như kết nối cơ sở dữ liệu, hỗ trợ POP
(Post Office Protocol) và SMTP (Simple Mail Transfer Protocol), COM
(Component Object Model). Ngoài ra, có rất nhiều third-party add-ons
được viết ra để tăng cường các tính năng của ColdFusion, tuy nhiên chúng
thường không được cung cấp miễn phí.



Ví dụ sau dùng CFM
để mô tả một câu lệnh rút trích dữ liệu:








<CFQUERY
DATASOURCE="QLSV" NAME="SV">



SELECT MaSV, NameSV, BD



FROM
DSSV WHERE MaSV = #URL.MaSV#



</CFQUERY>







Thuộc
tính DATASOURCE của thẻ <CFQUERY> xác định một ODBC data source
(nguồn dữ liệu). Thuộc tính NAME được dùng sau này khi cần trình bày kết
quả lên browser.




Khi thực hiện trên browser, URL có
dạng như sau:



[url=http://www.gizlen.org/browse.php?u=Oi8vd3d3LmFueXNpdGUuY29tL2NmbS9nZXRkYXRhLmNmbT9NYVNWPVRIMDAx&b=11]http://www.anysite.com/cfm/getdata.cfm?MaSV=TH001[/url]



Như
vậy, nếu các tham số truyền vào không được kiểm tra và lọc tốt, người
dùng có thể truyền vào các giá trị không chuẩn làm thay đổi điều kiện
của câu lệnh SELECT, dẫn đến việc họ có thể lấy được toàn bộ dữ liệu của
các sinh viên khác.



Để trình bày kết quả của câu lệnh
SELECT trên, hãy tham đoạn mã sau:







<HEAD>Thong
Tin Sinh Vien</HEAD>




<CFOUTPUT
QUERY="SV">



<LI>#NameSV#, #BD#,
(#MaSV#)</LI><BR>



</CFOUTPUT>












Studio
- Cung cấp một môi trường cho người dùng phát triển các ứng dụng web.







Cho
đến nay, có 2 vấn đề bảo mật thường gặp với CFM là việc lọc không tốt
các tham số truyền vào và cung cấp sẵn nhiều script ví dụ (như
openfile.cfm, exprcalc.cfm) mà hacker có thể lợi dụng để dùng cho mục
đích của mình như upload file, xem nội dung file, điều khiển các dịch vụ
web hoặc thậm chí thực thi các lệnh nguy hiểm khác.



Giải
pháp đơn giản để giảm nguy cơ bị tấn công là xóa bỏ các script cung cấp
sẵn không cần thiết hoặc cập nhật các bản sửa lỗi cho các script và lọc
kĩ các giá trị truyền vào.







7. ASP
(Active Server Pages)



ASP là môi trường ngôn ngữ script
phía server của Microsoft phát triển chủ yếu phục vụ cho các web server
IIS (Internet Information Server). ASP có thể được dùng kết hợp với
HTML, mã script và các thành phần ActiveX phía server tạo nên các trang
thông tin có nội dung động; thực thi các lệnh hệ thống, kết nối cơ sở dữ
liệu, COM...




Ngôn ngữ ngầm định dùng cho ASP là
VBScript, đây là phiên bản script của ngôn ngữ Visual Basic quen thuộc.
Tương tự một số ngôn ngữ script khác, có 2 dạng VBScript dùng cho ASP.
Với script phía server, ta đặt mã lệnh trong thẻ <%@ và %>; phía
client, ta dùng thẻ HTML <script>
admin
admin
Thiếu Úy III
Thiếu Úy III

Tổng số bài gửi : 627
Diem : 6552
Thank : 4
Join date : 24/03/2010
Đến từ : Bỉm Sơn - Thanh hóa

https://itprofes.forumvi.com

Về Đầu Trang Go down

Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết