encrypt connection string là chuẩn rồi cãi gì nữa mà cãi.
kakaka...
Tất nhiên web.config là cách linh động nhất để ấn định thông số cho ứng dụng rồi, nó cũng giống như config.php hay wp-config.php vậy, nhưng nó được phía server "giữ kỹ" nhất có thể
Cũng xin thưa các bác là encrypt cái web.config không hề tăng thêm 1 chút secure nào trên server side cả mà để secure nó against các đồng nghiệp trong cái team/phòng phát triển thôi, mà cty nào chẳng có loại này. Tại sao vậy? nếu hacker tấn công vào một ms-server bằng cách canh me cái chập chờn của ms mà lựm web.config về nghe mắc cừ quá , vậy các bác cũng đoán được khi lấy đc web.config thì đã đứng ở đâu rồi chứ. Lại nữa, cái để decrypt ko nằm trong dll của người dùng thì cũng thuộc 1 add-in hệ thống, cũng chẳng cần bận tâm dịch ngược, mà dịch ngược managed dll đâu có khó, nhưng thả 1 chút xíu nguyên code .cs hay .vb để hòa vào cái app đó thì dễ hơn, ms đâu có cấm, thứ gì mà dump chẳng được. keke
Đọc tới đây như chợt thấy mặt trời,
Đồng ý vì đã học 6 năm - nhiều bậc cũng chưa thấy biết gì ráo.
Ôi trời ơi;
(1) Phải chi bà con đang bàn cái vụ sql injection mà bác cho cái ví dụ trên thì còn kiêng nễ, thôi bỏ quá cũng được.
(2) Nghe câu: "một chuyên gia về security cũng không bao giờ dùng tới một chuỗi char chấm dứt bằng null(0)" thì tôi giật cả mình; trong c/c++ mà ko dùng 0 kêt thúc chuỗi thì chẳng lẽ kết thúc chuỗi bằng con mắt à? Thêm nữa, bạn nên xem cách lợi dụng copy tràn vùng đệm để gửi mã độc nhé. Cũng xin thưa bạn là cái đám hàm c/c++ ***_s là do microsoft đẻ ra phục vụ cho những kẻ viết c/c++ bất cẩn. Thêm nữa, c/c++ đâu phải chỉ có ở windows, các hđh khác cũng dùng cả đấy thôi; ko bắt chước thêm hàm ***_s chẳng lẽ các hđh khác hỏng hết à? Xin nhắc là tại sao tôi nói 'những kẻ viết c/c++ bất cẩn'; lấy ví dụ viết web nhé, csdl MySql có trường họ tên 30 ký tự, cái php page cho người dùng nhập tên để lưu, thằng user nó nghịch nhập cái tên 100 ký tự, ko kiểm tra gì cả mà cứ thế tạo nguyên con sql statement tán vào database, nó báo lỗi. chưa nói đến trường hợp nó nhập 1 đoạn script, 1 thằng user vô tôi khác vô xem tên bị dẫn đi đâu đấy... đấy là người viết php bất cẩn
Đúng, có thể bạn biết nhờ đọc lóang thoáng ở đâu đó, hoặc nhờ ai đó nói qua cho nghe nhưng thực sự bạn chưa hiểu đến ngọn nguồn. Rất cần học hỏi thêm.
.net tuyệt đối là OOP, vì vậy ko có chuyện thả 1 biến kinh điển nằm lang thang; tất cả phải đóng gói vào lớp và thể hiện ra bằng đối tượng. Nếu bạn có khả năng quản lý ứng dụng theo các mức lớp đối tượng thì bạn có thể đặt biến như property trong 1 lớp đối tượng cụ thể; ví dụ biến đó có thể đặt và dùng trong 1 thread thì lớp Page của trang web là quá đủ. Nhưng nếu liên quan events (cái này LAMP ko có) ngoài page (Render after the page generated) thì dùng lớp Application, nếu xuyên application thì dùng httpHandler. Nếu bạn thấy như thế rối quá thì làm 1 lớp static để khai thác ở đâu cũng được, hoặc ẹ quá cho vào session.
Riêng về connection, bạn biết tại sao MS nó khoe cái công nghệ databases connectionless này rồi chứ; tốt nhất là: mở ra - dùng ngay - đóng lại nhanh chóng, đừng có để cái connection object lê la, nên nhớ bạn đang lập trình web, mà website chắc ko phải chỉ có 1 người. Nếu 1 ngày bạn thuê cái shared economy hosting của godaddy nó cho 50 concurrent connections mỗi lúc thì bạn sẽ điên đầu vì cái cách bạn đang muốn làm đấy.
PS. Bạn để ý trong các lệnh tạo object dùng dbconnection, ms nó thòng thêm 1 option trong tham số thứ 3 hay 4 gì đó, giúp tự động đóng db connection khi đối tượng sử dụng bị clear.
theo mình thì việc khai báo toàn cục như bạn hungtvht là bạn í thấy việc open connection phải sử dụng đi sử dụng lại nên muốn khai báo 1 biến toàn cục để đỡ mất công khai báo --> giảm code. việc này bạn hoàn toàn có thể sử dụng trong Global.asax (có thể khai báo trong session start hoặc application start) tùy theo nhu cầu của bạn bạn có thể tìm hiểu thêm Global.asax (xem thêm tại http://msdn.microsoft.com/en-us/library/2027ewzw.aspx)
Tuy nhiên việc khai báo như vậy sẽ dẫn đến việc open connection đến CSDL nếu không quản lý các connection này sẽ dẫn đến việc connection không được giải phóng --> web sẽ chạy chậm hoặc nặng hơn là sẽ bị treo cả hệ thống. bạn nên xem thêm bộ dọn rác của .net (garbage collection) và tại sao connection không tự hủy nhé.
Cho nên theo mình thì nên thực 1 class quản lý connection đến CSDL (open, close) sau đó chỉ kế thừa là xong (các project sau cứ copy class này vào là xong)
Theo thiển ý của tôi thì nếu đã truy cập vào được File System để đọc nội dung file web.config thì dù có giấu connection string chỗ khác rồi cũng sẽ bị moi ra, bạn có mã hóa thì rồi cũng phải giải mã, hacker chỉ việc chèn 1 câu lệnh vào trang ASP.NET thì sẽ truy cập được giá trị đã mã hóa thôi.
Nếu việc truy cập vào hệ thống dễ dàng vậy thì dùng Windows Authentication có khi còn nguy hiểm hơn, vì khi đó hacker muốn làm gì cũng được.
Bookmarks