ASP: Các nguyên tc bo mt khi trin khai các ng dng Web :
trang này đã được đọc ln
1. An toàn trước kh năng b tn công CSS (Cross-Site Scripting)
Kiu tn công CSS đin hình nht xy ra khi tin tc c tình chèn mt đon văn bn có cha script
độc hi vào các form nhp d liu. Ni dung nhp vào có th cha các th <OBJECT> hoc
<SCRIPT> cùng các đon mã hết sc nguy him. Trình duyt, khi truy nhp site, cho rng các
srcipt này do máy ch gi ti, hoàn toàn vô hi nên s chy nó cp độ bo mt bình thường,
gây ra hu qu tai hi cho máy tính ca người s dng .
Để bo v khi b tn công theo kiu CSS, cn chú ý ít nht nhng đim sau:
- Cp nht thường xuyên các bn sa li bo mt mi nht ca IIS và Windows.
- Lc các ký t đặc bit do người s dng nhp vào như < > " ' % ( ) & + -
- Lc để loi b các ký t đặc bit, kết xut trên cơ s thông tin nhp vào ca
người s dng. Xem k các d liu t:
- Request.Form Collection
- Request.QueryString Conllection
- Request Object
- Database
- Cookie
- Các biến Session và Application
Để có th lc được, cn xác định c th lược đồ mã hoá ký t trên các trang Web,
trong th META, phn header. Ví d:
<head> <META http-equiv="Content-Type" Content="text/html; charset=ISO-8859-1">
</head>
2. ng dng có th không cn s dng các cookie thường trc
Cookie thường trc là nhng tp, được các ng dng Web gi ti máy tính người s dng và vn
tn ti trên cng ca máy tính ngay c khi h không còn duyt site. Chúng lưu mt s thông tin
v người s dng để các ng dng Web tu biến ni dung cho phù hp vi tng đi tượng người
s dng hoc cho phép h b qua giai đon đăng ký đăng nhp. Các cookie không thường trc
được lưu trong b nh máy tính ca người s dng và ch tn ti trong thi gian người s dng
duyt site. IIS da vào các cookie không thường trc để xác định mt phiên ASP. Không có nó,
IIS không th duy trì bt k các thông tin v phiên làm vic, chng hn như các biến phiên.
Nếu site ca bn s dng cookie thường trc, không nên yêu cu IIS lưu tr chúng trong tp log
ca IIS. Nếu tp log lưu li tt c các thông tin đăng nhp ca người s dng thì rt có nhiu kh
năng, do mt tho hip nào đó, nhng thông tin này có th được tiết l ra ngoài.
3. S dng SSL cho tt c các trang nhy cm được chuyn trên mng Internet
SSL mã hoá ni dung ca các thông đip TCP/IP để nó không b nhòm ngó trên đường truyn.
SSL, hoc mt gii pháp mã hoá khác VPN chng hn, rt cn thiết khi gi các thông tin nhy
cm (như s th tín dng) qua mng. Cơ hi thâm nhp đường truyn và ly cp các thông tin bí
mt là thp song không phi không th có.Người s dng s không đặt nim tin vào site ca bn
nếu các thông tin nhy cm không được mã hoá.
Tuy nhiên, mt trái ca SSL là làm chm li hiu năng thc hin ca ng dng. Mc s dng tài
nguyên h thng CPU đòi hi trong tiến trình mã hoá và gii mã cho mt trang SSL có th cao
hơn t 10 đến 100% so vi các trang không được bình thường. Nếu máy ch ca bn có lưu lượng
các trang SSL cao, bn có th phi cân nhc ti vic s dng thêm mt b tăng tc SSL phn
cng.
4. Yêu cu người s dng đăng nhp mi khi s dng ng dng
Nguyên tc này áp dng cho các ng dng có yêu cu th tc đăng nhp. Điu này có nghĩa là
vic đăng nhp t động da trên cookie là không được phép. Mc dù người s dng có th thy
phin hà nhưng nếu cho h đăng nhp t động da trên cookie s có rt nhiu nguy him (và như
ta đã thy phn trước, s dng các cookie thường trc không phi lúc nào cũng phù hp).
Mt bin pháp tiếp theo cn thiết để bo v mt khu là hu tính năng Autocomplete ca IE trên
các trường mt khu. Điu này có th thc hin bng cách thêm thuc tính AUTOCMPLET
="OFF" cho th <FORM> hoc <INPUT>. Ví d:
<input type="password" name="pwd" size=16 maxlength=16 AUTOCOMPLETE="OFF">
5. Log out người s dng ra khi h thng ngay khi h ri site
Gi s mt người s dng đang xem mt trang web trên site ca bn, sau đó h truy cp mt site
mi nhưng cui cùng li quyết định quay tr li trang ca bn bng cách n phím BACK. Trong
trường hp này, ng dng phi yêu cu người s dng đăng nhp li mt ln na. Phát hin
nhng tình hung tương t như tình hung va ri ca người s dng phi da hoàn toàn vào các
script chy phía trình duyt mà không th da vào server vì nó không biết người s dng đã
nhng đâu. Cách gii quyết đầy đủ nht cho vn đề này là s dng mt gii pháp bo mt Proxy
Server như ca Netegrity SiteMinder (http://www.netegrity.com).Gii pháp Proxy Server s giám
sát mi yêu cu Web t trình duyt và ghi li mi địa ch trình duyt đã truy nhp để ng dng có
th kim tra.
Mt cách thc không đầy đủ trong vic kim tra các gii hn site có th thc hin bng cách thiết
lp Request.ServerVariables("HTTP_REFERER"). Nếu người s dng có gng truy nhp bt k
trang nào khác vi trang đăng nhp, t mt URL ca mt site khác, thì h s b t chi. Tuy
nhiên, phương pháp này không th ngăn
nga mt người s dng ri b site ca bn để ti mt site khác nhưng sau đó li quay tr li site
ca bn và tiếp tc phiên làm ca h.
6.Ct kết ni khi người s dng không tương tác vi site trong mt khong thi
gian nht định
Có hai gii pháp cho vn đề này, mt gii pháp phía máy ch và mt gii pháp s dng script
phía trình duyt. Trong gii pháp th nht, chúng ta s dng IIS Manager và đặt gii hn phiên
ASP là mt khong thi gian mong mun nào đó (giá tr mc định là 20 phút). Trong ng dng,
lưu tr thông tin truy nhp vào mt biến phiên làm vic và kim tra nó trên mi trang người s
dng duyt qua. Nếu thông tin truy nhp không thuc v mt biến phiên, người s dng đã b ct
kết ni vi site và ng dng cn định hướng h sang trang truy nhp h thng. Hơn na, mc dù
chưa phi có th tin cy tuyt đối, bn cũng có th viết mã để x lý ct kết ni người s dng
trong s kin Session_OnEnd tp Global.asa.
Gii pháp phía client s dng chút ít JavaScript. Chèn thêm đon mã sau vào đầu ca mi trang
Web kết xut bi ng dng:
<script Language="JavaScript">
window.setTimeout("window.navigate('Logout.asp')", 900000); </script>
'Logout.ASP' là trang để ct kết ni người s dng vi ng dng. 9000000 là khong thi ti đa
tính bng mily giây người s dng vn duy trì phiên làm vic ca h trong trường hp không có
tương tác nào vi site.
7. ng dng không cho phép login đồng thi
Yêu cu này có nghĩa là ti mt thi đim, người s dng không th truy nhp ng dng vi 2
phiên làm vic khác nhau. Đây cũng là nguyên tc áp dng cho phn ln các ng dng
client/server và máy trm khác.
Trong môi trường IIS/ASP, vic đáp ng yêu cu này không có gì khó khăn. 2 s kin
Session_OnStart và Session_OnEnd trong Global.asa có th s dng để kim tra phiên truy
nhp hin thi ca người s dng. Bn cũng có th áp dng mt gii pháp ca cơ s d liu đ
hu mt phiên làm vic đang tn ti khi mt phiên làm vic mi được bt đầu.
8. Mã ngun ng dng không cha chú thích ca người phát trin
Bt c cp bo mt nào cũng có th tht bi. Trong nhng trường hp khi đã truy nhp được vào
các tp mã ngun ca Website thì nhng chú thích ca người phát trin s là nhng tr giúp đắc
lc cho tin tc, nguy him nht là trong trường hp mã ngun có cha nhng "viên ngc" như tên
và mt khu dùng trong quá trình chy th ng dng. Yêu cu này ch áp dng cho nhng tp
script, chng hn như các trang ASP, không áp dng cho các đon mã trong các đối tượng COM
đã được biên dch.
Trước đây, nhng đim yếu v bo mt chưa được khc phc ca IIS làm cho các script ASP trên
mt s site rt d b đọc trm. Nhiu tin tc biết rng hc có th đọc các script này bng cách
thêm chui "::$DATE" vào cui yêu cu truy xut trang. Để tránh các ri ro có th xy ra, cn loi
b mi chú thích trên trang ASP, HTML hoc mã JavaScript. Bn có th thc hin bng tay
nhưng cách nhanh nht là viết mt chương trình để loi b các chú thích t các loi tp khác
nhau.
9. Không lưu tr thông tin kết ni cơ s d liu trong global.asa
Thông tin kết ni cơ s d liu gm tên server , tên cơ s d liu, thông tin truy nhp SQL Server.
Vì là mt tp văn bn, nhng thông tin trong global.asa có th b l và rơi vào tay nhng đối tượng
s dng không đúng mc đích. Nhng
thông tin này nên được lưu tr nhng nơi khác. Hai cách ph biến là lưu tr nó trong mt tp
hoc trong mt Register.
Lưu tr thông tin kết ni cơ s d liu trong mt tp và sau đó có th đọc được bng File System
Object hoc XML Parser là cách an toàn hơn lưu trong global.asa. Mt gii pháp lưu thông tin trên
tp khác là s dng tp UDL vì nó
cho phép lưu tt c các chi tiết v kết ni. Chui kết ni ADO s tr thành "FILE Name =C:\
Path_That_IUSR_<machinename>_Can_Get_To\MyDataLink.UDL" trong đó tài khon dch v
IIS, IUSR_<machinename>phi có quyn truy nhp để đọc được tp này.
Lưu các thông tin kết ni dưới hình thc được mã hoá trong registry là cách an toàn nht. Điu
này yêu cu ng dng phi viết các thông tin mã hoá vào trong registry và các thành phn COM
phi thu v và gii mã nó thi gian chy.
Đối vi IS 5, nếu s dng thành phn COM+, còn có mt la chn registry khác. COM+ cho phép
mi thành phn có Constructor được thiết lp trong Component Services Manager. Vì không mã
hoá thông tin, cách này cho phép người qun tr site kim soát vic truy nhp cơ s d liu và
thay đổi nó vào bt c lúc nào.
10. Các tp audit log ca cơ s d liu nên ghi nhn tt c các thay đổi đối vi
d liu
Các tp audit log ca cơ s d liu cung cp các thông tin quá kh v nhng thay đổi đối vi d
liu trong các bng. Mt cách thông thường là to các trigger ca cơ s d liu để ghi li tt c
các thao tác Insert, Update và Delete. Tuy
nhiên, ghi nhn tt c thay đổi đối vi mi bn ghi có th làm tăng kích c cơ s d liu ca bn
lên nhiu ln. Để gim khi lượng d liu lưu, cn phi cân nhc k nhng thay đổi d liu các
bng nào cn được ghi nhn. Mc dù có th
to các bng và viết trigger bng tay, nhưng để gim nh khi lưng công vic, chúng ta có th
s dng gii pháp t đng. Mt s sn phm và script min phí ti địa ch
http://www.sqldevpro.com/articles/MagicAuditingCode.htm có th giúp bn thc hin điu này.
11. S dng các th tc lưu sn (stored procedure) để truy nhp cơ s d liu
Gii hn vic truy nhp cơ s d liu, ch cho phép thc hin thông qua các th tc lưu sn có
nhiu ưu đim v bo mt và hiu năng thc hin. Cách tiếp cn này nên được tính đến ngay t
khi bt đầu phát trin ng dng để vic trin khai v sau được d dàng hơn.
S dng th tc lưu sn an toàn hơn s dng ADO Recoredset hoc các lnh SQL bi vì qua nó
cho phép ch có người s hu cơ s d liu, dbo, mi có quyn quyn truy nhp ti bng ca tt
c nhng người s dng khác. Người s dng có quyn thi hành trên các th tc lưu sn nhưng
không có quyn đọc hoc sa đi d liu trong các bng mt cách trc tiếp. Ch có dbo và người
qun tr mi được phép s dng Query Analyzer hoc Crystal Reports để làm vic vi d liu. Vì
vy, yêu cu này có nghĩa là nếu Crystal Reports hoc các công c tương t khác được s dng
trên Website, vic thu nhn d liu phi được trin khai qua các th tc lưu sn.
Vi cách tiếp cn này, chúng ta cn to 4 th tc cho mi bng cho các lnh Select, Insert,
Update and Delete. Bn cũng có th to mt lp bao (wrapper class) đóng vai trò là giao din ca
th tc trong tng truy nhp cơ s d liu
ca ng dng.
Dưới đây là thí d v th tc chèn d liu vào bng Authors trong cơ s d liu
ca mt nhà xut bn:
CREATE PROCEDURE dp_authors_ins @au_id varchar(11), @au_lname varchar(40),
@au_fname varchar(20), @phone char(12) = NULL OUTPUT , @address varchar(40) =
NULL , @city varchar(20) = NULL , @state char(2) = NULL , @zip char(5) = NULL ,
@contract bit AS IF @phone IS Null SET @phone = ('UNKNOWN')
INSERT INTO authors WITH (ROWLOCK) ( au_id, au_lname, au_fname, phone, address,
city, state, zip, contract) VALUES (@au_id, @au_lname, @au_fname, @phone,
@address, @city, @state, @zip, @contract)
SELECT @phone = phone FROM authors WHERE au_id = @au_id
GO
Đọc và thay đổi d liu có hơi khác vi cách tiếp cn th tc lưu sn. Thay vì làm vic vi các
recorset ADO hoc to các câu lnh SQL để thi hành trên server, tt c vic truy nhp cơ s d