Article:
Đối thoại với Rookie - Phần tám: Information
681
phananhvu.myopenid.com 125Over 4 years ago |
Tôi đáp: "Ừa, 'kinh nghiệm chiến trường' đóng góp một phần nào đó nhưng theo anh, 'kế hoạch chuẩn bị' chu đáo giúp loại bỏ các sự cố này. Vậy, nhìn từ phương diện người dùng, em nghĩ sao nếu như em 'lỡ tay' gõ một giá trị gì đó và làm cả chương trình bị.. treo?"
[..] Kinh nghiệm bản thân anh thấy dạng thăm dò 'active' thường cho thông tin chính xác hơn nhưng cũng còn tuỳ mình muốn lấy thông tin gì nữa. Ví dụ như cách thăm dò để lấy thông tin về domain name, các hosts trong domain và IP của chúng thì em chỉ cần query một DNS server nào đó thì đã có thể có một số thông tin. Ngay cả em dùng các công cụ online (web-based) để lấy thông tin loại này cũng thuộc dạng 'passive' và cũng có thông tin khá chính xác (ngoại trừ công cụ online này sử dụng một DNS server nào đó có vấn đề). Nếu em muốn lấy thông tin cụ thể hơn và các hosts trong một mạng mà thông tin này không được công bố trên DNS công cộng thì phải vận dụng đến cách thăm dò 'active'. Nói tổng quát thì có những loại thông tin đòi hỏi dùng dạng 'active' thì mới lấy được. Cho nên, 'active' thì thường chính xác hơn nhưng ít kín đáo hơn, 'passive' thì kín đáo hơn nhưng những thông tin này mang tính tổng quát hơn.
Xin xem phần mục lục của series này ở bài giới thiệu.
Information? What the...
Suốt vài tuần qua tôi quá bận rộn nên liên lạc rất qua loa với
bộ ba Hưng, Khoa và Duy. Hình như các cậu cũng nhận ra được điều này
nên offline messages và e-mail từ bộ ba này ít hẳn. Cũng có thể các cậu
quá bận rộn nên không còn thời gian để hỏi han nữa.
Chiều nay rảnh rang, tôi đăng nhập vào YIM để xem offline messages
và không ngờ bộ ba Hưng, Khoa, Duy đang online. Tôi chào 'cuti': "Hello Hưng, khoẻ hông em? Sao không học hành gì mà cứ 'trực' online hoài vậy?"
'cuti' trả lời tôi bằng một 'conference invitation': "Hello anh già. Anh rảnh hông? Vào đây đi. Tụi em muốn hỏi vài chuyện được hông anh?"
Tôi chậc lưỡi, ngẫm nghĩ không biết mấy ông tướng này muốn hỏi
gì. Hơn nữa tôi đang ở sở, vào YIM không tiện lắm. Thế nhưng tôi cũng
tiếp nhận lời mời và mở đầu: "Được rồi, anh vào vài phút rồi phải dzọt vì anh đang ở sở đó nha!"
'haothu' chào và nhận định: "Chào anh, lâu ngày quá anh. Em thấy anh lúc nào cũng bận rộn vậy? Ngồi chơi với bọn em một tí thôi mà."
Tôi đáp: "Ừa, anh thì lúc nào cũng bận rộn. Anh hiện đang ở sở nên vào YIM
không tiện lắm. Nếu anh đang ở nhà thì dễ rồi. Mấy đứa có chuyện gì cần
thiết không?"
'cuti' nhanh nhảu: "Dạ cũng không có gì. Bọn em vừa thi xong nên rảnh rang hơn trước, định tiếp tục 'làm phiền' anh đây :)."
'docco' cẩn thận: "Em thấy mớ khái niệm và dẫn giải của anh trong những lần trước
đây còn quá sức nhiều thứ để bọn em thử nghiệm và lãnh hội. Em không
biết Hưng và Duy nghĩ sao chớ riêng em thì em cảm thấy như thế. Em sợ
bị.. 'bội thực' nếu không 'tiêu hoá' kịp :) nên có lẽ em sẽ không hỏi
nhiều đâu."
Tôi cười đáp: "Em nói đúng đó. Thông tin xung quanh mình nhiều lắm nhưng cái
quan trọng là dung nạp nó như thế nào. Có những điểm mình cần phải hiểu
cặn kẽ, có những điểm mình chỉ cần tiếp nhận để tiếp tục khai mở. Tuy
nhiên, nếu một lúc nào đó cảm thấy có cảm giác muốn 'bội thực' thì nên
chậm lại và dành thời gian để tháo gỡ những khúc mắc trước khi đi
tiếp."
Cả ba dường như đang trầm ngâm. Hồi lâu, 'cuti' lên tiếng: "Em thấy thằng Duy nói đúng thật và anh ủng hộ nhận xét của nó là
hoàn toàn chính xác. Cũng may là bọn em có điều kiện học hành căn cơ ở
trường. Cho nên khi nhận ra những lổ hổng của chính mình trong khi trao
đổi với anh, bọn em có thể 'lấp lổ' không đến nỗi cực nhọc. Điều em
thấy rõ là chương trình giáo dục của nước mình có những điểm cần cải
thiện. Em thấy thầy cô giáo ít chịu đào sâu hoặc giới thiệu những kiến
thức, thông tin mới mẻ mà cứ theo cái giáo trình cũ rích mà lặp đi, lặp
lại."
Tôi thắc mắc: "Làm sao em biết được giáo trình em đang học cũ rích vậy? và nếu
chương trình giáo dục của nước mình cần cải thiện thì cần làm những
gì?"
'haothu' Khoa xen vào: "Hì hì, anh không biết đó thôi. Em dám chắc là anh không có giáo
trình của trường em trong tay nên anh không rõ nó 'cũ rích' đến cỡ nào.
Bọn em thì có thể truy cập Internet nên mày mò, lục lạo trên Internet,
vào các trường đại học lớn trên thế giới thì thấy giáo trình của họ
'nặng' và mới hơn mình nhiều. Em chẳng thấy có mấy nước tân tiến còn
dạy Pascal nữa. Trong khi đó ở VN mình, cứ chui đầu vào lập trình là
dính ngay Pascal. Học mòn ghế vẫn cứ mấy cái chương trình 'đồ chơi'
viết bằng Pascal chán như con gián. Lên một chút thì học VB. Ban đầu em
còn thấy thích, sau đó mò vào các diễn đàn 'chuyên' về lập trình thì
thấy bà con choảng nhau chí choé về VB. Em thấy phe chống cũng có lý vì
học VB là học chương trình viết Visual Basic của Microsoft chớ chẳng
phải hoàn toàn là học ngôn ngữ Basic. Học sinh học như thế, khi bị đẩy
đến chỗ phải viết chương trình dùng ngôn ngữ Basic mà không có công cụ
VB thì.. bó tay. Còn khái niệm software engineering thì chẳng mấy ai
đề cập đến. Cho nên khi thằng Duy chuyển cho em nội dung nó chat với
anh lần trước, em thấy tiếc là đã vắng mặt :("
Tôi đáp: "Ùm.. quả thật là anh không nắm được tình hình ở VN cho lắm. Anh
có sinh hoạt trên một diễn đàn khác thì thấy có rất ít người quan tâm
hơn đến những ngôn ngữ lập trình mới và quan tâm sâu đến software
engineering. Ngoài ra, phần lớn tình hình quả có những điểm phản ảnh
điều em vừa nhận xét."
'cuti' Hưng không kém phần khích động: "Đó chỉ mới ở phương diện lập trình thôi đó anh. Các phương diện
khác như networking, bảo mật thì rất sơ sài. Networking thì gần như là
Microsoft Networking chớ chẳng phải là networking tổng quát. Còn bảo
mật thì hầu như em chưa thấy ở trường dạy gì hết. Bởi vậy khi bắt đầu
lò dò tham gia các diễn đàn, em thấy mình giống y như trong bụi nhảy ra
vì có quá sức nhiều thứ mình chưa bao giờ nghe tới. Em nghe mấy thằng
bạn đi học bên Sing, bên Châu Âu.. bảo là bọn nó có nguyên một môn về
security và môn này có nhiều phần nhỏ. Học xanh mặt luôn. Em không biết
chừng nào nước mình mới đưa những thứ này vào giáo trình nữa. Còn vào
diễn đàn chuyên bảo mật thì quanh đi quẩn lại chỉ toàn là những thứ
đụng tới web, tới yahoo, chán ngấy đến cổ :("
Tôi cười và nhận xét: "Này, hình như bọn em kêu anh vào đây để 'tố khổ' chuyện giáo
trình hay sao đó ;-). Kêu với ai chớ kêu với anh thì cũng như 'nước đổ
đầu vịt' thôi bởi vì anh đâu có làm gì được đâu nào. Anh nghĩ bọn em và
các sinh viên nói chung nên làm một việc gì đó tích cực hơn cho vấn đề
này. Ví dụ, bọn em ngồi lại với nhau và phân tích cặn kẽ ưu, nhược điểm
của giáo trình hiện tại. Đưa ra các đề nghị thay đổi và lý do cụ thể để
bảo vệ các đề nghị này. Tất nhiên mọi thứ phải trên giấy bút đàng
hoàng, câu cú, trình bày cho tươm tất rồi trình lên ông trưởng khoa thì
hoạ may."
'docco' Duy gởi một biểu tượng 'lè lưỡi' tỏ ý e ngại rồi nói: "Trời, anh đúng là lạc hậu quá rồi. Chắc anh ở nước ngoài lâu quá
nên quên hết chuyện nước mình. Em thấy chuyện này cực kỳ khó thực hiện.
Thứ nhất, bọn em không đủ sức hình thành một bản phân tích cho ngon
lành để trình cho ông trưởng khoa. Thứ nhì, em không dám chắc ông
trưởng khoa có buồn tiếp nhận bản phân tích này hay không. Thứ ba, cho
dù ông ta có tiếp nhận đi chăng nữa, em cũng không dám tin là ông ấy
làm gì đó với đề nghị này hay nó bị.. chìm vào quên lãng."
Tôi gật gù rồi đáp: "Hèm.. em đưa ra khó khăn, anh đề nghị hướng giải quyết nhưng
hướng này xem ra không được hả? Anh chẳng biết phải làm gì hơn. Anh
không thể nhận xét hay ý kiến nhiều vì chưa nắm rõ sự thể, chưa biết
cái giáo trình em nói có nội dung như thế nào. Điều anh có thể đề nghị
là nên làm một việc gì cụ thể và tích cực thì mới giải quyết được vấn
đề. Nhưng sao tự nhiên lại 'tố khổ' vậy cà?"
'cuti' Hưng nhanh nhảu: "Không phải tố khổ đâu anh. Em muốn đưa chuyện này ra chỉ để anh
thấy rằng thực tế bọn em phải đối diện nhiều hạn chế lắm. Riêng em thì
em chỉ mong là anh đừng nghĩ rằng bọn em lười nhác nên chẳng thu hoạch
được bao nhiêu trong chuyện học tập bởi vì lắm khi em hỏi anh những
điều.. ngớ ngẩn."
Tôi đáp: "Hì hì, hoá ra là muốn.. phân bua đây. Có bao giờ em thấy anh phát biểu hay anh có thái độ gì chứng tỏ rằng anh nghĩ
em lười nhác chưa? Em an tâm đi. Cứ thử chiêm nghiệm về mức độ trao đổi
của anh em mình những lần đầu, lần này và những lần về sau, em sẽ thấy
có những cái khác, có những cái biến thiên. Bởi vì không những chuyện
kiến thức mà sự thông hiểu ý kiến và suy nghĩ của nhau làm cho việc
trao đổi trở nên dễ dàng và thông suốt hơn nhiều. Nếu em quả thật lười
biếng thì anh sẽ 'quạt' thẳng tay liền, đừng lo :). Vậy bọn em cần anh
vào đây có chuyện gì gấp không?"
'haothu' Khoa lên tiếng: "Dạ không có gì gấp đâu anh. Phần em thì em chỉ thấy càng lúc càng
lùng bùng sau mỗi lần xem lại nội dung trò chuyện của mấy anh em mình.
Em đang cố gắng ghép nối những mẩu chuyện, những thông tin trong nội
dung trò chuyện này lại với nhau để hình thành một khối thông tin liền
lạc nhưng em thấy khó quá :(. Em định hỏi thêm anh một số điểm, được
không anh?"
Tôi trả lời: "Được chớ em. Tuy nhiên không phải ngay bây giờ bởi vì anh đang ở
sở, anh phải logoff đây. Tối nay về nhà, mấy anh em mình nói chuyện
tiếp nếu bọn em rảnh. Hay em thấy khi nào thì tiện?"
'cuti' Hưng liếng thoán: "Dễ quá mà anh. Bọn em vừa thi xong, thời gian không là vấn đề. Chiều nay em sẽ online canh chừng anh lên á."
'docco' Duy diễu: "Còn 'ẻm' để đâu mà lên ngồi canh chừng vậy pa? Nói lên là phải lên đó nha."
Tôi kết thúc: "Thôi, anh phải dông đây. Có gì chiều tối gặp lại."
Và tôi logoff.
Cơm nước xong, tôi thong thả log vào YIM. Quả thật ba 'trự' Hưng, Khoa và Duy đang 'canh chừng'. Tôi chào và chọc quê 'cuti': "Hông bận lo 'ẻm' hay sao mà lên đây 'canh' thật vậy em?"
'cuti' gởi tôi conference invitation kèm theo thông điệp: "Ái chà, thằng khứa Duy khai với anh hết rồi phải hông?"
Tôi tiếp nhận lời mời và kèm theo câu trả lời: "Khai gì em? khai vụ em đi hóng mát với 'ẻm' đó hả?"
'haothu' và 'docco' gởi hai thông điệp gần như cùng một lúc, cùng chế diễu 'cuti': "Thằng khỉ Hưng này cái gì cũng được, chỉ có chuyện 'ghệ' là dấu dấu diếm diếm như mèo dấu.."
"Trời, có gì mà dấu hả pa? 'ẻm' chịu đi chơi thì phải vỗ ngực tự hào chớ việc gì phải ngại?"
Tôi xen vào: "Thôi, 'cuti' không thích 'bàn' chuyện này thì tha cho nó đi mấy
đứa. Chừng nào nó muốn 'thổ lộ tinh tầm' thì tự nhiên nó sẽ.. phun ra
có.. vòi thôi :)."
'haothu' không tha, chêm thêm: "Em biết thằng khỉ Hưng quá rõ mà anh. Em học với nó từ cấp I lên,
bây giờ nó đang nghĩ trong đầu em cũng biết nữa mà. Em chỉ chọc quê cho
vui tí thôi chớ thằng này lịt lịt mà xịt ra khói đó."
Tôi cười và lảng sang chuyện khác: "OK, hồi chiều em nói là em có vài thắc mắc gì đó Khoa, em nói đi."
'haothu' ngập ngừng: "Chà.. hông biết tự nhiên sao em quên tuốt luốt là mình muốn nói
gì nữa. Anh chờ em một tí để em 'restart' lại con CPU trong não của em
cái đã."
Chuyển hướng sang 'cuti' để 'haothu' có thời gian sắp xếp lại những điều mình muốn nói, Tôi đáp: "Thong thả thôi em. Còn 'cuti' có nhận xét gì về nội dung Duy và anh nói chuyện lần trước không?"
'cuti' nhanh nhẩu: "Thì.. đã chớ sao anh? nhưng chắc không đã bằng nói chuyện 'trực
thoại' rồi đó. Em chỉ có cảm giác là những điều mấy anh em mình bàn
càng ngày càng rộng ra chớ không phải càng ngày càng đi vào chi tiết.
Em đoán rằng anh muốn chia xẻ những khái niệm quan trọng và cần thiết
để tiếp cận vấn đề. Tuy nhiên, thực tình mà nói thì em thấy rất khó
liên hệ nó đến môi trường thực tế. Có lẽ tụi em chưa đi làm, chưa có
nhiều kinh nghiệm nên thấy những khái niệm anh đưa ra nó lạ lẫm quá."
'haothu' reo lên: "Trời, thằng Hưng nói sao đúng ý em vậy? Em cũng muốn nói với anh
như thế. Em thấy những khái niệm về tính liền lạc, về sự quan trọng của
giềng mối, dẫn đến chuyện nhìn vấn đề từ nhiều phía, rồi khái niệm và
kỹ năng chuẩn bị trước khi thực hiện ý định.. mà anh đưa ra đều hết
sức lý thú. Tuy nhiên, em ráng 'apply' vào trong thực tế em đang đối
chọi thì chẳng biết phải bắt đầu từ đâu cả. :("
Tôi trầm ngâm vài giây rồi hỏi: "Em cho anh một ví dụ thực tế mà em đang đối chọi xem?"
'haothu' đáp: "Dạ ví dụ như ở trường ra bài lập trình chẳng hạn. Yêu cầu dùng
một ngôn ngữ lập trình nào đó để tính ngày, giờ, khoảng cách, chuỗi số,
biến thiên.. Em thấy những thứ này chỉ cần hình thành một cái thuật
toán nào đó rồi xem cú pháp ngôn ngữ làm thế nào là viết thôi. Em cố
hình dung làm sao nhận định giềng mối của yêu cầu đến phần tạo thuật
toán rồi đến chuyện tìm hiểu cú pháp. Và rồi, nhìn từ nhiều phía trong
hoàn cảnh này là nhìn thế nào anh? Còn chuẩn bị kế hoạch thì tất nhiên
là phải chuẩn bị rồi đó nhưng chẳng lẽ em phải viết một bản kế hoạch
trên giấy?"
Tôi cười đáp: "Anh nghĩ em hơi bị.. máy móc rồi. Những khái niệm kia nên ứng
dụng một cách linh động, tùy hoàn cảnh, tùy mức độ lớn nhỏ của công
việc. Mình không thể áp dụng mọi thứ một cách cứng nhắc được. Nói về mặt giềng mối cho yêu cầu cụ thể ở trên với việc hình thành
thuật toán và cú pháp của ngôn ngữ lập trình thì anh nghĩ rằng em khai
triển nó đúng trình tự và logic rồi. Giềng mối giữa yêu cầu và thuật
toán quá rõ ràng và hiển nhiên: phải hiểu được và hiểu đúng yêu cầu thì
mới hình thành đúng thuật toán. Đi xa hơn nữa em có thể tự chất vấn
mình để xem thuật toán mình vừa hình thành có tối ưu chưa. Sau khi hình
thành kết quả cuối cùng cho thuật toán, mang nó vào việc coding chỉ là
một bước ứng dụng. Thuật toán của em càng hay, càng súc tích, càng vững
thì tự nhiên bước coding trở nên đơn giản và đẹp thôi. Theo anh đây là
cái giềng mối hiển nhiên. Nói về chuyện 'nhìn nhiều phía' thì có vẻ hơi trừu tượng hơn mặt
'giềng mối' một tí. Tuy nhiên, ở mức độ nào đó em vẫn có thể 'nhìn' nó
ở góc độ khác nhau. Ví dụ em tự xét xem giải thuật được đặt ra với mục
đích là gì? em muốn lấy kết quả cuối cùng mà chương trình trả về, hay
em muốn thấy nó giải quyết vấn đề nhanh chậm, hiệu xuất ra sao trong cả
một khối ứng dụng nào đó. Giả sử chương trình em viết sẽ được một người
dùng và chỉ sử dụng những giá trị nhập đơn giản, đúng tiêu chuẩn thì
sao? nếu 100 người cùng dùng và họ đòi hỏi giá trị nhập phức tạp hơn,
đa dạng hơn thì sao? Đó là chưa kể em cần nhìn từ góc độ người dùng để
hình thành chương trình của mình vững vàng hơn. Riêng chuyện 'hình thành kế hoạch' thì anh nghĩ thế này. Đây là
một thói quen và lối khai triển của mỗi cá nhân. Nếu em có thói quen và
khả năng hình thành kế hoạch trong đầu một cách rành mạch mà không cần
giấy bút thì không việc gì phải dùng giấy bút. Trường hợp này thật ra
chỉ khả thi cho những công việc có tầm cỡ nhỏ và đơn giản. Một khi em
phải tiếp diện với một công trình lớn, phân tích và hình thành kế hoạch
trên giấy bút không những giúp em nhận định vấn đề một cách chính xác
và chi tiết hơn, nó còn là một phương tiện lưu trữ bởi vì dăm ba ngày,
một vài tháng em sẽ quên hết các chi tiết. Nếu em muốn quay lại (vì lý
do nào đó) thì em vẫn còn thông tin lưu trữ. Ở khuôn khổ bài tập ở
trường, có lẽ em chưa thấy sự quan trọng của việc hình thành kế hoạch
(mặc dù ở mức độ nào đó em vẫn phải hình thành kế hoạch trước khi thực
hiện) nhưng chắc chắc em sẽ thấy nó quan trọng như thế nào trên thực tế
công việc. Cho mục đích hoàn tất bài tập, một trang nhăng nhít những
chọn lựa, sửa đổi thuật toán và dăm ba dòng mã giả (psuedo code) trước
khi em bắt tay vào viết, theo anh đó chính là 'hình thành kế hoạch' rồi
:)."
'haothu' Khoa hỏi tiếp: "Anh cho em hỏi chi tiết này nha? anh nói Đó là chưa kể em cần nhìn từ góc độ người dùng để hình thành chương trình của mình vững vàng hơn là sao anh?"
Tôi đáp: "Ừa, anh cũng đoán nếu như em thực sự quan tâm đến kết quả em tạo
ra, em sẽ thắc mắc khía cạnh này. Em nghĩ thế nào về câu nói ấy vậy?"
'haothu' Khoa có vẻ ngập ngừng: "Dạ, em nghĩ.. à... ùm.. mình viết chương trình xong rồi mình
dùng nó để thử nghiệm thì mình đã tự đặt mình vào góc độ người dùng rồi
phải không anh? Em nghĩ phải có lý do gì khác anh mới đề cập chi tiết
này. Nếu nó chỉ đơn giản như thế thì anh nêu ra làm chi phải không ạ?"
Tôi cười đáp: "Đúng vậy, em nhận xét đúng lắm. "Nhìn từ khía cạnh người dùng"
tất nhiên sẽ liên quan đến chuyện dùng chương trình này. Tuy nhiên, nhìn như thế nào mới là quan trọng. Khi em viết một chương trình hay tạo ra một quy định nào đó, em thường bị sa vào cõi chủ quan.
Có nghĩa là em giả định mọi người cũng nghĩ như em. Ví dụ, em biết rõ
chương trình của em chỉ tiếp nhận số nguyên chẳng hạn, khi thử nghiệm
hiển nhiên em chỉ dùng các con số tròn trịa để dùng. Bởi thế, kết quả
em nhận được luôn luôn chính xác. Tại sao em lại dùng những con số
'tròn trịa' để thử nghiệm? đây là vấn đề tâm lý mà thôi, trí não con
người làm việc rất kỳ lạ ;-). Nếu người dùng bình thường lỡ tay gõ vào
một số thực chẳng hạn, chuyện gì xảy ra? Hoặc họ lỡ tay gõ nhầm một dấu
chấm, dấu phẩy trong phần INPUT thì chuyện gì xảy ra? Tất nhiên là
chương trình sẽ có sự cố, phải không em?"
'cuti' Hưng rú lên: "Ái chà, hay thật. Nếu là em thì em cũng chẳng nghĩ đến chuyện
người dùng sẽ gõ những gì khác ngoài các con số thực. Đúng là trí não
con người kỳ lạ thật. Đây có phải là 'kinh nghiệm chiến trường' không
anh?"
Tôi đáp: "Ừa, 'kinh nghiệm chiến trường' đóng góp một phần nào đó nhưng
theo anh, 'kế hoạch chuẩn bị' chu đáo giúp loại bỏ các sự cố này. Vậy,
nhìn từ phương diện người dùng, em nghĩ sao nếu như em 'lỡ tay' gõ một
giá trị gì đó và làm cả chương trình bị.. treo?"
'haothu' cười và trả lời: "Dạ, thì em sẽ nghĩ rằng chương trình đó.. chuối chớ sao anh? :)"
Tôi nói tiếp: "Nếu thế thì mình nên làm gì để cho nó không.. chuối nữa?"
'cuti' liếng thoắng: "Mình mở rộng để chương trình ấy tiếp nhận thêm số thực?"
'docco' Duy chậm rãi: "Em nghĩ mình cần dùng cơ chế 'error handling' nào đó. Đưa vào các
cụm điều kiện cách để thẩm định xem giá trị INPUT có thoả mãn yêu cầu
hay không trước khi xử lý."
Tôi đáp: "Ý kiến của em hay lắm đó Duy. Liệu mình mở rộng ra để tiếp nhận
thêm số thực có đáp ứng chính xác yêu cầu của đề bài hay không Hưng? Đó
là chưa kể trường hợp người dùng 'lỡ tay' gõ vào một ký tự nào đó bất
hợp lệ. Anh thấy một điểm lý thú là mấy đứa nghiên về hướng tạo giải
pháp cấp thời hơn là nhìn vấn đề ở bình diện tổng quát :)."
'cuti' chống chế: "Em nghĩ mở rộng cũng hay mà anh. Chắc em suy nghĩ chưa kỹ hay sao đó."
Tôi trả lời: "Ừa, có lẽ em chưa suy nghĩ kỹ không chừng ;-). Đà khía chi tiết
này là vì anh muốn nhấn mạnh tầm quan trọng của việc chuẩn bị kế hoạch
đó thôi. Nếu chuẩn bị kế hoạch kỹ thì em có dịp liệt kê ra hầu hết các
tình huống và giải pháp cho mỗi tình huống hơn là nảy ra một ý kiến
nhất thời nào đó."
Tôi tiếp tục khơi mào: Vậy đứng trên phương diện bảo mật, sự nguy hiểm của việc thiếu xác thực giá trị nhập sẽ là gì?"
'haothu' xuýt xoa: "Ái chà, em thấy làm gì thì làm chớ software mình viết mà chính nó
bị treo hay nó làm treo máy thì thật là xấu hổ. Nếu nói về mặt bảo mật
thì rõ ràng sự cố này phạm lỗi bảo mật rồi."
Tôi đáp: "Đúng như vậy đó Khoa. Bất cứ sự cố ý hay vô tình làm software bị
crash trong môi trường một hoặc nhiều người dùng đều có thể xem là bị
phạm lỗi bảo mật (vì software thiếu an toàn). Khía cạnh bảo mật nằm ở
chỗ tình trạng dịch vụ bị treo hoặc không còn tồn tại để cung cấp cho
người dùng."
'docco' reo lên: "A, em liên tưởng đến những trường hợp thâm nhập trên web mà em có
đọc qua nhiều nơi. Có phải ý anh là việc input validation không vững
chắc thì sẽ dẫn tới hiệu quả thiếu bảo mật?"
Tôi cười và đáp lời 'docco': "Em nhận xét đúng lắm. Một HTML form hay bất cứ một phương tiện nào tiếp nhận dữ liệu nhập đều nên
có cơ chế input validation. Thiếu cơ chế này, dữ liệu nhập có thể chứa
những thứ bất hợp lệ (đối với chương trình ứng dụng) và sẽ tạo hậu quả
lớn nhỏ, khác nhau, tùy theo hoàn cảnh. Không những 'input validation'
hết sức quan trọng mà cơ chế 'error handling' cũng vậy. Một lập trình
viên giỏi và cẩn thận thường đi xuyên qua bước 'chuẩn bị kế hoạch' để
tạo nên các trường hợp cho 'error handling'. Cơ chế này càng tỉ mỉ thì
cơ hội dẫn đến những biến cố tiêu cực và những thông tin nguy hại xảy
ra càng ít."
'cuti' Hưng nhận xét: "Hì hì, từ một bài tập lập trình mà anh dẫn đến cả chuyện thiết kế
phần mềm lẫn khía cạnh bảo mật của nó được. Phải nói là em phục anh đó.
Em nghĩ cái bài tập đó chỉ có tụi em dùng thôi, ông thầy chấm xong là
vĩnh viễn chẳng bao giờ đụng tới mấy cái software 'đồ chơi' đó nữa anh
ơi."
Tôi cười, đáp: "Hì hì, bởi thế ngay từ đầu anh đã nói là mình phải uyển chuyển,
phải linh động trong khi ứng dụng một hoặc nhiều nguyên tắc/khái niệm
cho việc gì đó. Không nên cứng nhắc không thì hoá ra trì trệ và thiếu
ứng hiệu. Chuyện anh mở rộng ở đây chỉ là một số khía cạnh thường thấy
trong khi đi học cũng như trong lúc đi làm thôi. Đó là những 'kinh
nghiệm xương máu' anh muốn chia sẻ để em khỏi dẫm lại những bước anh đã
dẫm :). Có thể em chưa liên tưởng những điểm trên rõ ràng ngay lúc này
nhưng anh hy vọng một ngày không xa em sẽ thấy điều anh đặt ra ở đây nó
'thật' và 'thường gặp' đến mức nào. Tạo một chương trình nhỏ bé, đơn
giản có thể khó thấy được tầm quan trọng của việc 'chuẩn bị kế hoạch'
và chuyện 'error handling' hay 'input validating'. Tuy nhiên, nắm bắt
được tầm quan trọng của các khái niệm này ngay lúc này thì sẽ đỡ vất vả
hơn khi đụng phải những thứ to lớn hơn."
'docco' lên tiếng: "Em vẫn thấy những chuyện này quá gần với lãnh vực software
engineering hơn là bảo mật anh à. Có lẽ em vẫn chưa hình dung được một
chuyên viên bảo mật thật sự phải làm những gì. Cũng có thể những điều
em nghe thấy đã tạo ra cho em một tiêu chuẩn nào đó về trách nhiệm của
một chuyên viên bảo mật và tiêu chuẩn này hơi.. khác những điều anh
đưa ra."
Tôi đáp: "Em có nghe câu ngạn ngữ tiếng Anh: the first impression lasts chưa? Ấn tượng đầu tiên đóng vai trò rất quan trọng. Những điều em nghe thấy và đã
tiếp nhận trước đây thường trở thành một thứ tiêu chuẩn của em. Anh
thấy việc tiếp nhận một điều hoàn toàn mới dễ hơn là vứt bỏ 'tiêu
chuẩn' cũ để tiếp nhận 'tiêu chuẩn' mới. Điều mình có thể rút ra ở đây
là một chuyên viên bảo mật kinh nghiệm, một tay thâm nhập sừng sỏ và
một lập trình viên dày dặn đều có chung một điểm: họ đều có khả năng
chuẩn bị kế hoạch, có khả năng phân tích và thẩm định vấn đề. Còn lý do
tại sao việc 'chuẩn bị kế hoạch' cẩn thận là việc cần thiết thì anh đã
phân tích lần trước rồi. Trong giới hạn bài tập ở trường mà Khoa đưa ra ở đây thì anh dám
chắc một điều: em đạt kết quả cao hơn nếu em 'chuẩn bị kế hoạch' kỹ
lưỡng; em đạt kết quả thấp hơn nếu em bắt tay vào thực hiện liền mà
không chuẩn bị hoặc ít chuẩn bị. Trên bình diện bảo mật, nhiều người cho rằng viết software thế nào
thì viết, miễn sao nó chạy là tốt. Muốn bảo vệ hệ thống thì chỉ cài
firewall, gắn những thiết bị bảo mật vào là đâu vào đó. Đây là một cách
nhìn phiến diện. Nếu em quan tâm đến bảo mật và thâm nhập thì đây là
một chi tiết quan trọng đó. Firewall chỉ cản không cho phép truy cập
các dịch vụ bị 'cấm' và ở mức độ nào đó, nó cản một số trường hợp thâm
nhập điển hình. Không có firewall nào có thể cản lọc mọi hình thức đăng
nhập dữ liệu (vô tình hoặc cố ý) có thể gây ra vấn đề hư hoại cho hệ
thống cả."
'cuti' phát biểu: "Em công nhận anh nói rất có lý. Chắc bọn em phải ứng dụng thử xem
sao. Hình như anh có vẻ chú trọng đến 'thái độ' tiếp cận và khai triển
vấn đề hơn là chi tiết khai triển cụ thể như thế nào phải không anh?"
Tôi đáp: "Chà, hôm nay 'cuti' nhận xét tinh tế lắm. Đúng như thế. Chi tiết
khai triển thế nào thì chỉ cần có thời gian và thông tin thu thập được
là khai triển được. Tuy nhiên, 'thái độ' thì chỉ có thể xác định đúng
một lần ngay từ đầu mà thôi. Nếu tiếp cận và khai triển với thái độ
không đúng mức thì cho dù có bao nhiêu cách khai triển (có sẵn) cũng có
thể dẫn đến kết quả không hoàn toàn như ý."
'cuti' khoái chí: "Dạ, không ít thì nhiều cũng thu thập được gì đó chớ anh? ;-)"
'docco' Duy hỏi tiếp: "Bây giờ em hỏi những việc gì cần chuẩn bị cho kỹ thuật
"reconnaissance" được không anh? Hồi nãy anh có đề cập đến chuyện
chuyên viên bảo mật, người thâm nhập và lập trình viên giỏi đều có khả
năng chuẩn bị kế hoạch. Vậy trong việc dò tìm thông tin của một hệ
thống đòi hỏi phải chuẩn bị những gì vậy anh?"
Tôi cười đáp: "Hà hà, em thấy 'ngứa ngáy' với 'reconnaissance' hả? Rồi, thì mình
bàn thử. Hãy nhìn 'reconnaissance' như một công tác và đã là một công
tác thì nó phải có nhu cầu cụ thể. Em còn nhớ chuyện 'nhu cầu cụ thể' mà mình đã đà khía trước đây hông?"
'docco' đáp: "Dạ nhớ chớ anh. Anh muốn em trả lời nhu cầu cụ thể của em cho việc 'reconnaissance' là gì hả?"
Tôi đáp: "Ừa, phải có nhu cầu cụ thể thì mình mới khai triển được chớ em :)"
'docco' trả lời: "Em nghĩ 'reconnaissance' là tìm hiểu xem hệ thống mình muốn thâm
nhập có những dịch vụ gì, nó chạy trên môi trường nào, nó thuộc mô hình
mạng ra sao, có những điểm mạnh yếu gì.. để giúp mình hình thành
phương án thâm nhập (hay bảo vệ) cho sâu sát. Đó là những điểm em 'gặt
hái' được từ những lần mấy anh em mình nói chuyện,"
Tôi cười và khơi mào thêm: "Vậy, nhu cầu cụ thể là biết rõ mục tiêu để tìm cách thâm nhập nó
phải không? Bây giờ để hình thành kế hoạch cụ thể, mình sẽ thăm dò cái
gì trước? cái gì sau? làm sao mình xác định được những thông tin mình
tìm kiếm là xác thực? những phương tiện nào mình sẽ dùng để thăm dò?"
'cuti' xen vào: "Ái chà, nãy giờ ngẫm nghĩ em mới thấy những gì anh em mình đà
khía từ trước đến giờ đều có liên quan mật thiết với nhau. Công nhận
độc thật. độc thật."
'haothu' thắc mắc: "Pa lại lảm nhảm gì nữa đó pa?"
'cuti' giải thích: "Nè nè, đầu tiên mình bàn chuyện 'hack' là gì, sau đó mình bàn đến
chuyện muốn 'thâm nhập' phải biết rõ cái mình muốn 'thâm nhập'. Kế tiếp
mình đào xới chuyện 'biết rõ' là phải biết thế nào, phải nắm ngọn ngành
ra làm sao. Rồi đến chuyện những giềng mối trong quá trình thu thập để
có thể 'biết rõ'. Kế đến là kỹ năng nhìn nhận và tiếp nhận vấn đề từ
nhiều phía. Lại thêm chuyện phải có kế hoạch để khai triển việc mình
cần làm sau khi xác định rõ nhu cầu cụ thể. Những điểm này không liên
quan mật thiết với nhau thì là gì nữa ông cụ?"
'haothu' gật gù: "À há, tao thua mày đó Hưng. Tao cố tổng hợp lại những thứ này mà không được và nó cứ rối bòng bong lên."
'cuti' phấn khích nhưng làm ra vẻ khiêm tốn: "Đâu có gì đâu mày. Chỉ cần xét lại trọn bộ những điểm cốt lõi mà bọn mình đã bàn thì ra liền thôi."
Tôi nhận xét: "Em tổng hợp vậy là xuất sắc đó Hưng. Phần còn lại chỉ là ứng dụng sao cho uyển chuyển thôi."
'cuti' không kìm được: "Ặc ặc, tưởng đâu đầu óc bị lú lẫn rồi chớ. Lâu lâu nói đúng một phát, được khen một phát sướng lên mây.. ặc ặc, hu hu."
Lúc này 'docco' mới xen vào: "Mấy pa này cứ cắt ngang hoài. Người ta đang nói chuyện 'recconnaissance' mà trời!"
Tôi trấn an 'docco': "Lo gì em. Mình còn ngày dài tháng rộng để nói chuyện mà. Anh thấy
Hưng tổng kết như vậy là chuyện rất nên làm đó. Ok, hồi nãy mình đang
nói tới đâu rồi nhỉ?"
'docco' hình như đã gõ sẵn nên thông điệp của cu cậu hiện ra trên màn hình gần như ngay sau khi tôi trả lời: "Dạ, hồi nãy đến đoạn anh hỏi là mình sẽ thăm dò cái gì trước? cái
gì sau. Cách nào xác định được những thông tin tìm kiếm là xác thực.
Những phương tiện nào sẽ dùng để thăm dò đó anh. Những điểm anh đưa ra
ở đây chính là những điểm em thắc mắc đó. Mình thăm dò cái gì trước,
cái gì sau có quan trọng không anh?"
Tôi đáp: "Ừa, có lẽ mình nên khai triển từng phần một để đỡ rối rắm. Theo
anh thấy, thăm dò có hai loại chính: động và tĩnh. Mỗi loại gắn liền
với cái gọi là 'trước' và 'sau'. Điểm quan trọng hàng đầu của việc thăm
dò là làm sao thu thập được thông tin xác thực nhất nhưng lại kín đáo
nhất, ít bị phát hiện nhất."
'haothu' reo lên: "Ái chà, thăm dò có 'động' và 'tĩnh' sao anh? Lần đầu tiên em nghe đó."
Tôi cười đáp: "Ừa, động và tĩnh là hai từ anh tạm dịch sang tiếng Việt. Đúng ra
nó là "active" và "passive" theo tiếng Anh. "Active" ở đây là 'động'
nhưng nó còn có tinh thần là trực tiếp. Trong khi đó, "passive" là tĩnh và nó mang tinh thần gián tiếp.
Vậy thế nào là "active" và thế nào là "passive"? active là lối thăm dò
tạo ra bằng cách tương tác trực tiếp với hệ thống mình muốn thăm dò và
passive là lối thăm dò không tương tác trực tiếp."
'cuti' thắc mắc: "Nhưng làm sao mình biết được có hai dạng thăm dò 'active' và 'passive' anh? Cái này mình đọc sách hay tham khảo ở đâu vậy?"
Tôi đáp: "Hai dạng thăm dò này quá rõ cho nên chỉ cần dùng suy luận thông
thường cũng có thể xếp loại chúng thành hai dạng. Còn những cách thăm
dò thế nào thì mình phải tham khảo nhiều nơi và tự tay táy máy mà ra."
'docco' hỏi tiếp: "Vậy giữa hai dạng này, cái nào cho mình thông tin chính xác hơn cái nào anh?"
Tôi trả lời: "Kinh nghiệm bản thân anh thấy dạng thăm dò 'active' thường cho
thông tin chính xác hơn nhưng cũng còn tuỳ mình muốn lấy thông tin gì
nữa. Ví dụ như cách thăm dò để lấy thông tin về domain name, các hosts
trong domain và IP của chúng thì em chỉ cần query một DNS server nào đó
thì đã có thể có một số thông tin. Ngay cả em dùng các công cụ online
(web-based) để lấy thông tin loại này cũng thuộc dạng 'passive' và cũng
có thông tin khá chính xác (ngoại trừ công cụ online này sử dụng một
DNS server nào đó có vấn đề). Nếu em muốn lấy thông tin cụ thể hơn và
các hosts trong một mạng mà thông tin này không được công bố trên DNS
công cộng thì phải vận dụng đến cách thăm dò 'active'. Nói tổng quát
thì có những loại thông tin đòi hỏi dùng dạng 'active' thì mới lấy
được. Cho nên, 'active' thì thường chính xác hơn nhưng ít kín đáo hơn,
'passive' thì kín đáo hơn nhưng những thông tin này mang tính tổng quát
hơn."
'cuti' vẫn tiếp tục thắc mắc: "Em vẫn thắc mắc là làm sao biết được những kỹ thuật thăm dò đây
anh. Ví dụ như bọn em tay mơ, chưa biết gì hết. Bây giờ bọn em muốn thử
thăm dò thì bắt đầu từ đâu anh?"
Tôi cười, đáp: "Tất nhiên là bắt đầu từ tài liệu, thông tin trong sách, trên web,
trên các forum chuyên về bảo mật hay thâm nhập. Nếu em thử dùng từ khoá
'reconnaissance' và google thử thì em sẽ thấy thông tin nhiều biết
chừng nào. Theo anh thấy, cái khó không phải là phương tiện tìm thông
tin mà là phương tiện thu thập, lọc lựa, thử nghiệm và ứng dụng thông
tin."
'haothu' cảm thán: "Ôi trời, sao em thấy bây giờ hỏi ai cái gì cũng được trả lời là
'google', 'google', 'google' vậy anh. Anh cũng đề nghị bọn em nên
'google' nữa rồi :(. Em thấy tìm thông tin trên 'google' lan man quá
anh."
Tôi đáp: "Em không biết sao? Dùng search engine cũng là một trong những kỹ thuật 'reconnaissance' đó em. Nói chung, khả năng tìm không thể thiếu cho việc 'reconnaissance'. Không biết tìm, không thể thực hiện 'reconnaissance' hiệu quả được."
'cuti' láu lỉnh: "Vậy anh muốn bọn em học cách dùng 'google' luôn chớ gì? ;-)"
Tôi trả lời: "Hì hì, không anh muốn mà anh chỉ đề nghị mà thôi.
Thời buổi này 'information is gold'. Information thì có khắp nơi. Em
lên web thì từ thứ rác rưởi đến những thông tin cực kỳ quý giá đều có.
Chỉ có em tự đào luyện cho mình kỹ năng tìm thông tin (bằng google hay
bất cứ search engine nào) và kỹ năng chọn lọc thông tin. Càng có thể
thu thập và chọn lọc thông tin, em càng 'đi trước' những người khác
trên phương diện này."
'cuti' phân bua: "Hì hì, em chỉ đùa thôi mà. Em biết 'google' và các search engine
khác có những thông tin cực kỳ quý giá. Em chỉ thấy khó ở chỗ dùng cách
nào để tìm và làm sao biết được thông tin nào cần lấy, thông tin nào
không cần lấy thôi."
Tôi đáp: "Em vào bất cứ trang chủ của bất cứ search engine nào cũng có thể
thấy không ít thì nhiều hướng dẫn cách 'search', em nên đọc kỹ hướng
dẫn để dùng cho hiệu quả. Sở dĩ ai cũng nhắc đến 'google' vì hiện nay
nó là 'máy tìm' số một. Thật ra không có nhiều người thực sự sử dụng
đúng mức chức năng của google để tìm thông tin và phần lớn là do không
chịu đọc hướng dẫn của google đưa ra. Anh thấy gần đây đám O'Reilly còn
xuất bản cả cuốn "google hack" nữa. Anh chưa đọc cuốn này nhưng anh
đoán là nó giới thiệu những thủ thuật tìm kiếm trên google và những thủ
thuật này đi từ phần hướng dẫn của google mà ra. Riêng việc biết thông tin nào cần lấy hay không thì đây là
vấn đề kinh nghiệm. Em phải cần thời gian để bồi đắp kinh nghiệm này.
Kinh nghiệm bản thân thì anh không 'tin' ngay vào nguồn thông tin anh
kiếm được. Anh thường tìm cả tìm nguồn thông tin khác để đối chứng và
khi có điều kiện, anh tự tay 'táy máy' để xác thực giá trị của thông
tin anh tìm được. Lâu ngày tự nhiên có kinh nghiệm nhiều hơn, mình có
thể xác định được nguồn tin nào đáng tin và nguồn tin nào cần xét lại.
Cũng từ kinh nghiệm, đôi khi đọc một đoạn thông tin em có thể xác định
thông tin này đáng tin hay không dựa trên tính logic của nó, dựa trên
sự liền lạc và sự vững vàng trong cấu trúc của nó."
'cuti' rên rỉ: "Ôi trời, sao mà khó quá vậy anh? :(. Bọn em đọc tiếng Anh chưa
nên thân mà anh còn bắt phải 'dính' vào chỗ xem nội dung thông tin để
đánh giá và thu lượm chúng thì làm sao làm nổi? Hoạ may bọn em có tiếng
Anh thật chiến, có khả năng đọc, nhớ và phân tích nhanh như.. điện."
'haothu' chêm vào thêm: "Em cũng thấy như vậy đó. Đưa em một cuốn sách của OReilly, của
Wiley hay của Syngress đã xuất bản, đã biên tập và chọn lựa hẳn hòi, em
đọc mà thấy muốn chảy.. mỡ ra, huống hồ chi thông tin tản mạn trên
net. Anh có cách gì khác không anh?"
Tôi cười, đáp: "Hì hì, bởi thế mấy nhà xuất bản mới kiếm sống được chớ em? trên
90% những gì được in trên sách đi từ những thông tin có trên Internet.
Thông tin được trao đổi từ các newsgroup, từ các forums, từ những nhóm
bug track, từ các security articles, từ trường đại học, từ các nhóm
nghiên cứu.. được thu thập, lọc lựa, tuyển chọn và được viết lại bằng
sách một cách có hệ thống, có logic, bằng thứ ngôn ngữ ai cũng có thể
tiếp nhận được. Tuy nhiên, không phải sách nào cũng có nội dung hoàn
toàn chính xác và một điều quan trọng là khi sách được in ra thì những
thông tin này gần như đã lỗi thời so với thực tế. Nhất là với lĩnh vực
công nghệ thông tin và đặc biệt là bảo mật."
'haothu' tiếp tục: "Vậy anh nghĩ bọn em phải làm sao bây giờ?"
Tôi đáp: "Làm sao? Thì em vẫn đi học, vẫn đọc sách giáo khoa cho cẩn thận,
vẫn đào luyện cho mình khả năng tiếp nhận thông tin theo dạng 'hàn lâm'
ở trường và bắt đầu làm quen với mớ 'hỗn độn' trên Internet chớ sao?
;-)"
'cuti' nhăn nhó: "Anh cứ trêu hoài :(. Em hỏi thật mà. Em cũng cảm thấy y hệt như thằng Khoa vậy."
Tôi cười phá lên rồi đáp: "Thì anh nói thật mà. Câu vừa rồi anh nói hoàn toàn nghiêm túc. Em
cứ thử nghiệm xem đi. Thông tin là thức ăn cho tinh thần, không ai có
thể ép em phải 'ăn' cái gì cả. Họ chỉ có thể đề nghị em nên chọn thức
ăn ra sao và cách tổng quát để 'tiêu hoá' thức ăn mà thôi."
'docco' tiu nghỉu: "Chắc phải vậy rồi. Em chợt nhớ một chi tiết mình 'đà khía' trước đây: đều đặn và điều độ;
nguyên tắc '4 đê' đó anh. Phải có '4 đê' thì hoạ may mới hình thành
được mớ kỹ năng cần thiết để 'chọn thức ăn và tiêu hoá thức ăn' phải
không anh?"
Tôi đáp: "Đúng rồi đó em. Chắc chắn phải cần '4 đê'. Thôi khuya rồi, anh
phải đi ngủ mai còn đi làm sớm. Lần sau mình 'đà khía' vài chi tiết về
'reconnaissance' cho vui nha?"
'cuti' nhanh nhảu: "Dạ, quá đã đó anh."
'docco' kỳ nèo: "Hứa đó nhe anh. Lần nào mình cũng sa đà vào những chuyện khác."
'haothu' hóm hỉnh: "Em thì cái gì cũng được hết. Miễn sao ngồi đà khía như thế này là vui rồi."
Tôi đáp: "Ừa, nhất định mình sẽ bàn chuyện này mà Duy. Anh chỉ thấy nó chưa
quá sức quan trọng lúc này thôi. Anh muốn em có 'right set of mind'
trước khi đi vào chỗ đó :). OK, bye mấy ku."
và tôi logoff. Đồng hồ cũng vừa gõ mười tiếng.
7/9/2005
Chưa phân loại
125