Vì bạn đã quét ứng dụng của bạn và tìm ra các khiếm khuyết, nên bây giờ là lúc
xử lý các vấn đề sử dụng Rational AppScan.
Đề nghị sửa chữa
Vậy nên bây giờ bạn thực sự hiểu một vấn đề XSS là gì, và tại sao nó lại là một
vấn đề phải được loại bỏ. Đây là lúc học cách sửa chữa nó. Nhấn tab Fix
Recommendation được trình bày trong Hình 26.
46 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2016 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Sửa các khiếm khuyết, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Sửa các khiếm khuyết
Vì bạn đã quét ứng dụng của bạn và tìm ra các khiếm khuyết, nên bây giờ là lúc
xử lý các vấn đề sử dụng Rational AppScan.
Đề nghị sửa chữa
Vậy nên bây giờ bạn thực sự hiểu một vấn đề XSS là gì, và tại sao nó lại là một
vấn đề phải được loại bỏ. Đây là lúc học cách sửa chữa nó. Nhấn tab Fix
Recommendation được trình bày trong Hình 26.
Hình 26. Sửa chữa
Rational AppScan giải thích theo cách thân thiện với người phát triển cách thức
sửa chữa vấn đề trong ứng dụng Web.
Rational AppScan thậm chì còn cung cấp các dòng ví dụ mã trình Java có khả
năng ngăn chặn vấn đề (xem Hình 27). Rational AppScan thực sự khiến cho việc
sửa lỗi được phát hiện giống như trò chơi trẻ con, thậm chí là cho hầu hết các nhà
phát triển còn "xanh".
Hình 27. Cố định mã được phép của Rational AppScan
Request/Response (Yêu cầu/Trả lời)
"Request/Response" cung cấp thông tin về lần kiểm tra thực tế mà Rational
AppScan đã tiến hành dựa vào ứng dụng Web của bạn. Rational AppScan hoạt
động bằng cách trước tiên gửi một yêu cầu bình thường, và sau đó mới gửi lại yêu
cầu như thế lần nữa, nhưng nó được thay đổi bằng kiểm tra khiếm khuyết. Nếu
bạn nhìn vào Hình 28, hình thể hiện "Kiểm tra" mở, phần văn bản đánh dấu màu
đỏ là phần kiểm tra thực tế (còn gọi lạ một biến thể) mà Rational AppScan đã đốt
tại ứng dụng Web của bạn. Điều này cho phép bạn xem chi tiết kiểm tra cụ thể .
Hãy chú ý đến cách cửa sổ mã trình thể hiện kiểm tra và màu đỏ thể hiện cái đã bị
thay đổi, cho phép bạn chọn nút đánh dấu AB để phóng đại đến phần trả lời nơi đã
tìm thấy chữ ký chứng thực kết quả. Bạn có thể sử dụng thông tin này để thực hiện
lại cuộc tấn công một cách thủ công hoặc thực hiện các kiểm tra cùng loại của
riêng bạn và sau đó lưu chúng trong Rational AppScan. Thậm chí bạn có thể trình
bày kết quả kiểm tra trong một trình duyệt Web.
Hình 28. Request/Response (Yêu cầu/Trả lời)
Biến thể là sự thay đổi không đáng kể yêu cầu kiểm tra gốc mà Rational AppScan
đã gửi cho máy chủ ứng dụng Web của bạn.
Nếu bạn nghi ngờ về tính hợp lệ của các kết quả kiểm tra được Rational AppScan
treo cờ, bạn có thể báo cáo vị trí sai cho đội hỗ trợ IBM Rational AppScan. Quá
trình này đỏi hỏi Rational AppScan gửi thư điện tử chi tiết kiểm tra cho IBM để
phân tích, nhưng đừng lo các chi tiết được gửi đi được mã hóa mặc định.
Sửa các vấn đề cụ thể
Rational AppScan cho bạn biết là có một khiếm khuyết Cross-Site Scripting (XSS)
trong có nghĩa là nhập trường
address (địa chỉ) có thể sử dụng để đưa tập lệnh () vào và do đó cho
phép một tấn công tập lệnh cross-site diễn ra. Kiểu tấn công này có thể khiến kẻ
tấn công ăn cắp hoặc chế tác một phiên Web của người dùng đã được chứng thực.
Khi bạn nhìn vào các kết quả Rational AppScan tổng thể của bạn, rõ ràng là nó có
các vấn đề XSS tương tự trong city, create, state, value, zip, vì tất cả những thứ
này đều gắn cờ như là bị "Stored Cross-Site-Scripting" tấn công.
Kiểm tra thẻ Fix Recommendation (gợi ý sửa). Rational AppScan cho biết cách
sửa các vấn đề này bằng cách lọc ra các ký tự không hợp lệ, chẳng hạn như "&"
";" "<" "@", và thậm chí còn cung cấp mã Java để thực hiện công việc này.
Vì thế bạn cần thêm các kiểm tra hợp lệ đầu vào trường trong mã Java của bạn, và
bạn sẽ sử dụng mã trong Ví dụ 1 để thực hiện việc này, cái mà nói rõ là chỉ chấp
nhận các ký tự số alpha.
Ví dụ 1. Kiểm tra hợp lệ đầu vào trường
if(request.getMethod().equals("POST")){
Pattern input = Pattern.compile("[a-
zA-Z0-9]*");
Matcher m = input.matcher(userid);
boolean match = m.matches();
Hãy nhìn khiếm khuyết thứ hai của bạn trên danh sách, Rational AppScan cho bạn
biết và có
thể bị Session Fixation làm hại. Rational AppScan nói cho bạn biết rằng phiên
Web của người dùng có thể bị lấy cắp hoặc chế tác do ứng dụng Web của bạn
đang cho phép các ID phiên được tạo bởi trình duyệt Web của người dùng của
bạn. Rational AppScan giải thích sửa chữa: Bạn cần chắc chắn là Ứng dụng Web
của bạn không chấp nhận các phiên do các trình duyệt người dùng tạo ra. Do vậy
bạn cần vô hiệu hóa phiên hiện tại của người dùng và tạo ra một ID phiên bất kỳ
mới sau khi người dùng vừa được chứng thực. Để làm được điều này bạn cần thêm
mã trong Ví dụ 2 cho login.jsp, cài mà vô hiệu hóa phiên Web hiện tại và cho phép
ứng dụng Web của bạn tạo một phiên mới.
Ví dụ 2. Vô hiệu hóa phiên Web hiện tại
session.invalidate();
session =
request.getSession(true);
session.setAttribute("userid",
userid);
Và trên logout.jsp, bạn cần loại bỏ phiên: session.setAttribute("userid", null);.
Vấn đề thứ ba trong danh sách của bạn là khiếm khuyết bảo mật ứng dụng Web cổ
điển khác: SQL Injection. SQL Injection cho phép kẻ tấn công chế tác cơ sở dữ
liệu phụ trợ bằng cách cho phép các lệnh SQL được thực hiện trong các trường
nhập ứng dụng Web của bạn. Rational AppScan cho bạn biết trường zip bị ảnh
hưởng. Mặt khác, như với XSS, Rational AppScan lại giải thích hợp lệ trường theo
cách sửa chữa khiếm khuyết này.
Điều đó sửa các vấn đề mức độ cao. Tiếp đến bạn nhìn thấy có vài vấn đề mức độ
trung bình liên quan đến Database Error Pattern Found.
Database Error Pattern có nghĩa là một kiểm tra được trả lại có lỗi cơ sở dữ liệu.
Một nguyên nhân có thể đúng đối với lỗi này là thiếu sự làm nhẹ bớt đầu vào
người dùng, tức là ứng dụng của bạn có thể bị SQL Injection hoặc XSS tấn công.
Hãy kiểm tra khuyến nghị. Bạn cần chắc chắn là bạn hoàn toàn giảm bớt đầu vào
người dùng trong mã của bạn, mà cần ngăn chặn lỗi cơ sở dữ liệu này và khiếm
khuyết có thể có trong lần quét tiếp theo.
Tiếp theo có hai vấn đề mức độ thấp trong danh sách của bạn, cả hai đều là
Session Identifier Not Updated. Rational AppScan cho bạn biết là có thể lấy cắp
hoặc chế tác các phiên người dùng hoặc cookies. Mặt khác, giống như vấn đề
Session Fixation, bạn cần ứng dụng Web của bạn tạo ID phiên của người dùng.
Hãy nhìn xuống phía dưới danh sách vấn đề của bạn, bạn nhìn thấy ba vấn đề mức
độ thông tin, tức là các vấn đề này không phải là khiếm khuyết ứng dụng Web
thực tế, nhưng có thể là một vấn đề có thể có và mối đe dọa, theo đúng nghĩa trong
đó các nhận xét có thể đọc được vừa được Rational AppScan phát hiện ra trong
các tệp .jsp. Rational AppScan cảnh báo bạn rằng các nhận xét này có thể chứa
thông tin nhạy cảm mà bạn không muốn mọi người hay tin tặc đọc được. Tác giả
kinh điển mà tôi đã tình cờ gặp trong đời thực khi kiểm tra các ứng dụng Web
trong trường, là các nhà phát triển để lại cửa sổ sau tên người dùng quản trị và mật
khẩu trong trường nhận xét, nhằm hỗ trợ người kiểm tra. Vì thế bạn cần kiểm tra
các nhận xét này hoặc tốt hơn nên gỡ bỏ hết các nhận xét ra khỏi mã trình của bạn.
Hãy nhớ là mã trình của bạn là đối diện cộng đồng, vì thế biện pháp bảo mật tối ưu
là gỡ các nhận xét ra khỏi mã trình, nhờ đó loại bỏ khả năng lộ thông tin về ứng
dụng Web cho tin tặc.
Bằng cách nhấn Remediation tasks bên trái, bạn có thể lọc trên danh sách các sửa
chữa được yêu cầu (xem Hình 29).
Hình 29. Remediation tasks (Tác vụ Khắc phục)
Cuối cùng cần kiểm tra Application Data (Dữ liệu Ứng dụng), mà cho bạn biết
mọi thứ rằng Rational AppScan đã khôi phục ứng dụng Web của bạn, vì thế bạn sẽ
nhìn thấy sơ đồ cây thư mục và tất cả WebPages Rational AppScan được khám
phá trong suốt quá trình. Cần phải luôn luôn kiểm tra hai lần để đảm bảo là
Rational AppScan đã phát hiện chuẩn xác tất cả các tệp Ứng dụng Web.
Trước khi bạn tiến hành các thay đổi cho mã trình của mình, hãy nhìn qua các báo
cáo Rational AppScanreports, vì quy trình tự nhiên là tạo ra một báo cáo bảo mật,
mà sau đó được cung cấp cho người phát triển có nhiệm vụ sửa lỗi.
Báo cáo bảo mật Rational AppScan
Bạn có một danh sách các vấn đề mà bạn cần người phát triển của bạn sửa chữa.
Bạn cần cung cấp cho họ các kết quả và các sửa chữa được khuyến nghị trong một
định dạng báo cáo đẹp.
1. Khi quét của bạn vẫn mở trong Rational AppScan, hãy chọn Tools >
Report (xem Hình 30).
Hình 30. Bắt đầu thủ thuật Báo cáo
2. Khi báo cáo bạn tìm thấy nhiều báo cáo Rational AppScan được tải trước
được lọc dưới một vài tựa đề chủ đề. Vì bạn muốn tạo ra một báo cáo nội
bộ để giúp các nhà phát triển giải quyết vấn đề, hãy gắn với báo cáo mặc
định. Loại Security Report.
3. Chọn Developer từ lựa chọn các mẫu.
4. Hoàn tất các lựa chọn báo cáo như trong Hình 31. Hãy lưu ý là ứng dụng
Web đã được mã hóa trong Java không phải .NET hay PHP, vì thế hãy loại
hai cái đó ra khỏi báo cáo, vì bạn không cần biết cách sửa chữa các vấn đề
trong các ngôn ngữ đó.
Hình 31. Tạo một báo cáo
5. Nhấn Layout (xem Hình 32), cho phép bạn tùy chỉnh hình thức báo cáo
nếu bạn muốn thêm logo công ty hoặc bất kỳ cái gì đặc trưng trong các
trang báo cáo xếp cạnh nhau. Một lời khuyên khi làm thực tế là hãy thêm
Company Confidential vào cuối trang. Bạn thực sự nên xem các các báo
cáo này như là thông tin có độ nhạy cảm cao trong tổ chức của bạn.
Hình 32. Báo cáo có chuông và còi
6. Chọn Save và đặt tên cho báo cáo của bạn (xem Hình33)
Hình 33. Lưu và đặt tên cho báo cáo của bạn
Báo cáo của bạn được lưu ở dạng tệp tin PDF.
Vậy là báo cáo của bạn đã sẵn sàng để cung cấp cho người phát triển rồi, trong
trường hợp của bài viết này chính là bạn đó! Vì thế bạn cần chạy qua các kết quả
báo cáo và chỉnh sửa mã trình ứng dụng Web Java của mình.
Sửa mã trình Java
Đến lúc này bạn cần hiểu rõ cái gì cần sửa chữa và làm như thế nào, vậy nên đây
là lúc phải sửa các khiếm khuyết bảo mật trong phạm vi mã trình.
Mở Rational Application Developer và thực hiện các thay đổi được in đậm dưới
đây (xem Ví dụ 3), hoặc bạn có thể cắt và dán hết cả đoạn để tiết kiệm thời gian.
Ví dụ 3. login.jsp được cập nhật với Phiên ban đầu mới trên Máy chủ Web và
Kiểm tra Hiệu lực
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<jsp:useBean id="users"
class="com.ibm.ds.users.UsersDataImpl" scope="page" />
<%@page language="java" contentType="text/html;
charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
login
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<meta name="GENERATOR" content="Rational Application
Developer">
Login
<%
String userid = request.getParameter("userid");
String password = request.getParameter("password");
session.invalidate();
session = request.getSession(true);
session.setAttribute("userid", userid);
if(request.getMethod().equals("POST")){
boolean matchu = false;
boolean matchp = false;
if(userid != null && !userid.equals("") &&
password != null && !password.equals("")){
Pattern input = Pattern.compile("[a-zA-Z0-9]*");
Matcher m = input.matcher(userid);
matchu = m.matches();
input = Pattern.compile("[a-zA-Z0-9]*");
m = input.matcher(password);
matchp = m.matches();
}
if(matchu && matchp && (userid != null &&
!userid.equals("")) &&
(password != null && !password.equals("")) &&
userid.length() <= 50 && password.length() <= 50 &&
request.getParameter("login") != null &&
request.getParameter("login").equals("Login")){
Data d =
SampleUtil.getData("jdbc:db2://localhost:50000/WEALTH",
"",
"");
users.setData(d);
Users u = users.getUsers(userid);
if(u != null && u.getPassword().equals(password)){
session.setAttribute("userid", userid);
response.sendRedirect("welcome.jsp");
}
else{
out.println("Error logging in.");
}
}
else
out.println("Error logging in.");
}
%>
userid:
Password:
Lưu ý là các nhận xét HTML đã được chuyển thành nhận xét JSP. Tại đây bạn
cũng thực hiện các thay đổi như đã nói ở trên, gồm cả hiệu lực đầu vào, trường
hợp mà nếu tên người dùng và mật khẩu không phải là kiểu chữ số, thì chúng bị từ
chối và không bao giờ thực hiện cho các so sánh SQL hay Java String. Hãy lưu ý
là bạn cũng cần chắc chắn là yêu cầu POST đã được đưa ra, và rằng nút Login có
tên "login" được đánh giá đúng như "login" trong yêu cầu POST.
Sửa chữa trong Ví dụ 4 bảo đảm người dùng nào cũng có thể đăng xuất khỏi ứng
dụng Wealth của bạn khi cần.
Ví dụ 4. logout.jsp được cập nhật. Làm đứt phiên
<!DOCTYPE HTML PUBLIC "-
//W3C//DTD HTML 4.01
Transitional//EN">
<%@page language="java"
contentType="text/html;
charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
logout
<meta http-equiv="Content-Type"
content="text/html; charset=ISO-
8859-1">
<meta name="GENERATOR"
content="Rational Application
Developer">
<%
String userid =
(String)session.getAttribute("userid");
if(userid != null){
session.setAttribute("userid",
null);
session.invalidate();
response.sendRedirect("login.jsp");
}
%>
Thay vì thay đổi nhận xét từ HTML sang JSP, phiên bị làm đứt một cách hợp lý
sao cho người dùng thực sự đăng xuất hoàn toàn.
Trong Ví dụ 5 bạn thay đổi mã trình để ngăn các cuộc tấn công tiêm nhiễm SQL
không xuất hiện trong ứng dụng của bạn.
Ví dụ 5. realestate.jsp được cập nhật
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<jsp:useBean id="realestate"
class="com.ibm.ds.realestate.RealestateDataImpl"
scope="page" />
<%@page language="java" contentType="text/html;
charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
realestate
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<meta name="GENERATOR" content="Rational
Application Developer">
Your realestate holdings
<table
border="1">AddressCity
ZipStateValue
<%
String userid = (String)session.getAttribute("userid");
if(userid == null){
response.sendRedirect("login.jsp");
}
Data d =
SampleUtil.getData("jdbc:db2://localhost:50000/WEALTH",
"",
"");
realestate.setData(d);
Iterator i = realestate.getRealestates(userid);
Realestate curr = null;
double total = 0;
while(i.hasNext()){
curr = (Realestate) i.next();
out.println(""+curr.getAddress()+""
+curr.getCity()+
""+curr.getZip()+""
+curr.getState()+
"$"+curr.getPropertyValue()
+"");
total += curr.getPropertyValue().doubleValue();
}
if(total > 0)
total = Math.round(total*100.0)/100.0;
%>
Total value: $
Enter new real estate:
<%
if(request.getMethod().equals("POST") &&
request.getParameter("create" )
!= null){
String address = request.getParameter("address");
String city = request.getParameter("city");
String state = request.getParameter("state");
String zip = request.getParameter("zip");
String value = request.getParameter("value");
if(!address.equals("") && !city.equals("") &&
!zip.equals("") && !state.equals("") &&
!value.equals("")){
Pattern input = Pattern.compile("[a-zA-Z0-
9\\p{Blank}]*");
Matcher m = input.matcher(address);
boolean matcha = m.matches();
input = Pattern.compile("[a-zA-Z\\p{Blank}]*");
m = input.matcher(city);
boolean matchc = m.matches();
input = Pattern.compile("[a-zA-Z][a-zA-Z]");
m = input.matcher(state);
boolean matchs = m.matches();
input = Pattern.compile("[0-9][0-9][0-9][0-9][0-
9]");
m = input.matcher(zip);
boolean matchz = m.matches();
if(matcha && matchc && matchs && matchz){
try{
realestate.createRealestate(new
BigDecimal(value), address, city,
zip,
state, userid);
response.sendRedirect("realestate.jsp");
}catch(Exception e){ out.println("Error adding
new real estate.
"); }
}
else
out.println("Error adding new real
estate.");
}
else
out.println("Error adding new real
estate.");
}
%>
Address:
City:
Zip:
State:
Value: $
back
Đây là bốn trường nhập số nguyên và chuỗi có hiệu lực đầu vào được đặt trên
chúng để tránh các cuộc tấn công tiêm nhiễm SQL được Rational AppScan chỉ ra.
Lớp BigDecimal thực hiện hiệu lực đầu vào bên trong, và vì thế bạn không cần
phải thực hiện hiệu lực đầu vào trên số liệu giá trị, mặc dù bạn có thể thấy là việc
hiển thị lỗi hữu dụng cho người dùng là hữu ích. Nếu, mọi thứ thông qua hiệu lực
đầu vào, thì tiếp đến bản ghi bất động sản mới được thêm vào cơ sở dữ liệu. Ngoài
ra các nhận xét HTML đã được chuyển sang nhận xét JSP sao cho chúng không
xuất hiện trong HTML nữa.
Ví dụ 6.securities.jsp được cập nhật
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<jsp:useBean id="securities"
class="com.ibm.ds.securities.SecuritiesDataImpl"
scope="page" />
<%@page language="java" contentType="text/html;
charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
securities
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<meta name="GENERATOR" content="Rational Application
Developer">
Your stock and options holdings
<table
border="1">SybmolDescription
Quantity*TypeCurrent price**
Total valueQuote date
<%
String userid = (String)session.getAttribute("userid");
if(userid == null){
response.sendRedirect("login.jsp");
}
Data d =
SampleUtil.getData("jdbc:db2://localhost:50000/WEALTH",
",
"");
securities.setData(d);
Iterator i = securities.getSecuritiess(userid);
Securities curr = null;
double total = 0;
while(i.hasNext()){
curr = (Securities) i.next();
String str =
""+curr.getSymbol()
+"&f=nd1l1";
URL url = new URL(str);
URLConnection conn = url.openConnection();
DataInputStream in = new DataInputStream (
conn.getInputStream ( ) ) ;
BufferedReader br = new BufferedReader(new
InputStreamReader(in));
String line = null;
if(br.ready())
line = br.readLine();
String company = line.substring(line.indexOf('"')+1,
line.indexOf('"',
line.indexOf('"')+1));
String date = line.substring(line.indexOf("\",\"")+3,
line.indexOf("\",",
line.indexOf("\",\"")+4));
String price = line.substring(line.indexOf("\",",
line.indexOf("\",\"")+4)+2);
int multQuantity = curr.getQuantity();
if(curr.getSecuritytype().equals("option"))
multQuantity = curr.getQuantity()*100;
float totalValue = Float.parseFloat(price)*multQuantity;
totalValue =
(float)(Math.round(totalValue*100.0)/100.0);
out.println(""+curr.getSymbol()+""
+company+
""+curr.getQuantity()+""+
curr.getSecuritytype()+"$"+price+
"$"+totalValue+""
+date+"");
total += totalValue;
}
if(total > 0)
total = Math.round(total*100.0)/100.0;
%>
Total value: $
* # of contracts for options** Delayed quotes, as
retrieved from
Yahoo! Finance™
back
Lỗi duy nhất mà lớp này có là các nhận xét trong HTML. Hãy lưu ý đến sự thay
đổi ở đây từ nhận xét HTML sang nhận xét JSP.
Cuối dùng, hãy vô hiệu hóa phiên (xem Ví dụ 7).
Ví dụ 7. welcome.jsp được cập nhật
<!DOCTYPE HTML PUBLIC "-
//W3C//DTD HTML 4.01
Transitional//EN">
<%@page language="java"
contentType="text/html; charset=ISO-
8859-1"
pageEncoding="ISO-8859-1"%>
welcome
<meta http-equiv="Content-Type"
content="text/html; charset=ISO-8859-
1">
<meta name="GENERATOR"
content="Rational Application
Developer">
<%
String userid =
(String)session.getAttribute("userid");
session.invalidate();
session = request.getSession(true);
session.setAttribute("userid",
userid);
if(userid == null){
response.sendRedirect("login.jsp");
}
%>
Welcome <% out.print(userid);
%>!
See your <a
href="securities.jsp">securities
See your real
estate
logout
Cuối cùng, đổi nhận xét HTML trong welcome.jsp sang nhận xét JSP, và vô hiệu
hóa phiên như đã nói ở trên.
Sau khi cập nhật jsp's trong Rational Application Developer, hãy kiểm tra mọi thứ
đang làm việc với ứng dụng Web Wealth.
Quét lần hai
Vì bạn vừa cập nhật mã trình Java của bạn và kiểm tra Ứng dụng Web Wealth
đang chạy, nên đây là lúc chạy lại Rational AppScan và xem xem có bao nhiêu
khiểm khuyết bạn vừa sửa.
Trước khi chạy Quét khác, hay kiểm tra dữ liệu bảng cơ sở dữ liệu của bạn, vì có
lẽ Rational AppScan Scan trước đã tạo ra các bảng có các dòng dữ liệu kiểm tra
mới, bao gồm XSS, cái có thể gây ra lỗi kiểm tra. Trong trường hợp này thông báo
Rational AppScan đã cộng 50 hoặc các nhập mục như thế vào bảng chứng khoản
của bạn.
Khi các bảng của bạn vừa được kiểm tra xong và Ứng dụng Web Wealth của bạn
vừa được kiểm tra xong, bạn cần được cài đặt toàn bộ cho lần quét khác.
Trong Rational AppScan, nhấn New hoặc File > New (xem Hình 34).
Hình 34. Chọn Mẫu Quét đã được tạo trước đó của bạn, WealthScan
Tiếp theo Wizard lại bắt đầu với thông tin mẫu quét trước và các cài đặt được tạo
ra. Bạn muốn lặp lại lần quét tương tự chính xác thì hãy chấp nhận các cài đặt này
và ấn Next 3 lần, chọn Application-Only và tiếp đến nhấn Finish.
Tiếp theo bạn được nhắc lưu lần quét thứ hai. Đặt tên cho nó là WeathScan2, sau
đó quét sẽ bắt đầu.
Khi Quét kết thúc, bạn cần thông báo là các khiếm khuyết Bảo mật được tìm ra
trước đó đã được xử lý hết và hiển thị một báo cáo xóa.
.
Bạn đã quét sạch thành công Ứng dụng Web Wealth khỏi tất cả những khiếm
khuyết bảo mật đã biết rồi đấy!
Các lựa chọn và mở rộng báo cáo Rational Appscan
Trong phần cuối này, bạn sẽ nhìn thấy một vài báo cáo khác nhau mà bạn có thể
tạo ra và các mở rộng mà bạn có thể sử dụng với Rational AppScan.
Các báo cáo Rational AppScan
Vì Ứng dụng Web của bạn không còn có khiếm khuyết bảo mật nữa, nên bạn có
thể tạo ra một vài báo cáo Bảo đảm Chất lượng chuyên nghiệp. Các báo cáo như
thế này được cung cấp như một phần của quy trình kiểm soát phát hành, miễn là
ứng dụng Web của bạn đã được kiểm tra bảo mật thành công, và phù hợp để đưa
lên Internet (xem Tải xuống để xem các báo cáo được tạo ra từ các lần quét của
bạn).
Vậy nên khi lần quét cuối của bạn vẫn mở trong Rational AppScan, chọn Tools >
Report.
Bây giờ hãy chọn một mẫu báo cáo phù hợp. Hình 35 trình bày một ví dụ về báo
cáo chuẩn.
Ví dụ 35. Báo cáo chuẩn ngành
Hình 36 trình bày một danh sách các báo cáo phù hợp quy định khác nhau mà có
thể chọn được.
Hình 36. Báo cáo phù hợp quy định
Báo cáo phân tích Delta
Khi kiểm tra các ứng dụng Web lớn, có thể thực hiện một vài lần quét bằng
Rational AppScan trước khi giải quyết tất cả các lỗi bảo mật. Nhân dịp này bạn sẽ
thông báo khi bạn sửa một vấn đề bảo mật, một vài vấn đề bảo mật nữa xuất hiện.
Do vậy, việc tạo ra các báo cáo phân tích delta nhằm thể hiện quy trình của bạn có
thể rất hữu dụng.
Phân tích Delta so sánh lần quét trước với lần quét hiện tại; thật dễ dàng tạo ra
chúng. Trong lần hiện tại của mình mà bạn muốn so sánh, hãy chọn Tools >
Report > Delta Analysis Report, và sau đó điều hướng đến lần quét thứ hai mà
bạn muốn so sánh trong báo cáo của mình (xem Hình 37).
Hình 37. Báo cáo phân tích Delta
Rational AppScan cho phép bạn tạo ra các mẫu báo cáo đặc trưng của riêng bạn
(xem Hình 38), mà rất đơn giản và dễ học quy trình.
Hình 38. Tạo báo cáo của riêng bạn
Các mở rộng Rational AppScan
Một tính năng có thể tùy biến hoàn toàn và hữu dụng nữa trong Rational AppScan
là sử dụng các Rational AppScan mở rộng. Các mở rộng là các tiện ích bổ sung
mà bổ sung tính năng phụ trợ và các khả năng của Rational AppScan (xem Hình
39). Chúng có thể bổ sung bất cứ thứ gì từ công cụ khai thác, đến thông báo thư
điện tử và đến mở rộng yêu thích của tôi mà xuất thẳng các kết quả quét vào một
bản trình diễn PowerPoint.
Hình 39. Chọn Extension Manager trong Rational AppScan
Các mở rộng Rational AppScan dễ viết và tích hợp trong Rational AppScan. IBM
nắm giữ một số mở rộng có thể tải miễn phí (xem hình 40) có sẵn để tích hợp tại
Hình 40. Chọn Install (Cài đặt)
Một trong những mở rộng hữu hiệu nhất có sẵn để tải xuống từ IBM là Email
Notification Extension (Mở rộng Thông báo Thư điện tử). Để giải thích làm thế
nào chúng có thể tích hợp dễ dàng và cách thức chúng hoạt động như thế nào, ở
đây có một bài hướng dẫn mở rộng nhỏ.
1. Trước tiên trình duyệt đến và tải Mail-E-Vent
Extension.
Mở rộng được tải xuống dưới dạng tệp tin nén, nhưng không giải nén tệp
tin này, vì định dạng .zip phù hợp cho việc nhập vào Rational AppScan
(xem Hình 41).
Hình 41. Điều hướng đến tệp Mail-E-Vent Zip được tải xuống của bạn
2. Cài đặt Mail Extension.
3. Đóng ứng dụng Rational AppScan và sau đó lại mở nó ra (xem Hình 42).
Hình 42. Quay lại the Extension Manager và mở Cài đặt "Mail-E-
Vent" mới
4. Chọn Save and Test Settings, và kiểm tra hộp thư đến của bạn để xem thư
kiểm tra (xem Hình 43). Và đó là tất cả những gì có với nó!
Hình 43. Thư kiểm tra thành công
Bây giờ Rational AppScan sẽ tự động gửi một thông báo thư (và một báo cáo nếu
có thể), khi Quét kết thúc, khi Rational AppScan mất khả năng kết nối với ứng
dụng Web, và quét tạm dừng yêu cầu nhắc đăng nhập được hoàn thành. Mở rộng
đặc biệt này có thể vô cùng hữu ích khi quét các ứng dụng lớn hơn và phức tạp
hơn, điều này có thể chỉ mất một lúc. Vì thế bạn có thể thoát ra và tiếp túc với các
việc khác, an toàn khi biết bạn sẽ nhận được một thư điện tử nếu Rational
AppScan "cần" bạn.
Cuối cùng bạn có thể tự tạo một mở rộng thật dễ dàng. IBM cung cấp mã nguồn
cho tất cả các mở rộng làm nét nổi bật trên Website của họ, vì thế bạn có thể xem
cách họ tạo ra đơn giản như thế nào. Cũng không mất thời gian để bạn có thể tích
hợp Rational AppScan vào các hệ thống nghiệp vụ của bạn và tạo ra các tính năng
bổ sung nhằm đáp ứng bất kỳ yêu cầu cụ thể nào mà bạn có.
Tóm tắt
Bạn chắc chắn là Ứng dụng Web Java Wealth của bạn được tạo trong Phần 1 của
loạt bài này không có các khiếm khuyết bảo mật đã biết. Xem lại lần cuối Ứng
dụng Web Wealth có thể được tải lên một máy chủ Web Internet, mà bạn không
phải bận tâm đến việc nó bị hack ở cấp độ ứng dụng Web. Song song với bài
hướng dẫn này, bạn đã học được tầm quan trọng của bảo mật ứng dụng Web, bỏ
thời gian để thực hiện chiến lược triển khai Rational AppScan, tùy biến một mẫu
quét, cách tiến hành quét, giải trình các kết quả, sửa chữa các khiếm khuyết trong
mã trình ứng dụng Web, và tạo ra các báo cáo bảo mật.
Các file đính kèm theo tài liệu này:
- Sửa các khiếm khuyết.pdf