[TOC]

## 文獻:GBT 38674-2020信息安全技術 應用軟件安全編程指南

## 問題01:什么是CAPTCHA?
驗證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(**全自動區分計算機和人類的圖靈測試**)的縮寫,是一種區分用戶是計算機還是人的公共全自動程序。**可以防止:惡意破解密碼、刷票、論壇灌水**,有效防止某個黑客對某一個特定注冊用戶用特定程序**暴力破解**方式進行不斷的登錄嘗試。
1. 一種有效防止機器人及惡意用戶濫用網站或服務;
2. 防止惡意破解密碼、刷票、論壇灌水、刷頁;
3. 防止黑客暴力破解。
## 問題02:嘗試編寫批量注冊賬號的惡意腳本。
1. 不斷寫入數據:計時器
2. 異步請求:Ajax
## 問題03:驗證碼圖像的src如何處理?如何點擊刷新?
* [ ] 視圖請求控制器,控制器請求模型,模型提供圖像,控制器返回圖像
* [ ] 點擊更新驗證碼需要防止緩存(時間戳)
```
$("#code").attr("src","CreateImage?time="+new Date().getTime());
```
## 問題04:如何設置Servlet響應的內容是圖像?
```
response.setContentType("image/jpeg");//設置響應類型
```
## 問題05:如何創建圖像工具類?需要哪些成員?
* [ ] 1. 驗證碼圖像--->提供給視圖
* [ ] 2. 驗證碼內容--->提供給登錄/注冊
## 問題06:如何創建圖像?
```
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
```
## 問題07:使用安全的隨機算法。

```
Random random = new SecureRandom();
```
## 問題08:實現對驗證碼進行干擾。

```
for (int i = 0; i < 10; i++) {
int x1 = random.nextInt(width/2);
int y1 = random.nextInt(height);
int x2 = random.nextInt(width/2)+width/2;
int y2 = random.nextInt(height);
g.drawLine(x1, y1, x2, y2);
}
```
## 問題09:Servlet如何輸入圖像?
```
ImageIO.write(image, "jpeg", response.getOutputStream());//輸出圖像
```
## 問題10:中文在計算機中是如何表示的?
**GB2312編碼范圍:A1A1-FEFE,其中漢字編碼范圍:B0A1-F7FE。**
GB2312編碼是第一個漢字編碼國家標準,由中國國家標準總局1980年發布,1981年5月1日開始使用。GB2312編碼共收錄漢字6763個,其中一級漢字3755個,二級漢字3008個。同時,GB2312編碼收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母在內的682個全角字符。
**16-55區(B0-D7區:176-215,A1-FE位:161-254)收錄3755個一級漢字,按拼音排序。**

56-87區收錄3008個二級漢字,按部首/筆畫排序。
### 漢字的表示
**雙字節編碼**
GB2312規定對收錄的每個字符采用兩個字節表示,**第一個字節為“高字節”,對應94個區;第二個字節為“低字節”,對應94個位**。
## 問題11:如何隨機一個漢字?
* [ ] 步驟1:一級漢字3755個,隨機生成一個數字,然后按照**每個區94個**字符進行整除或取余
* [ ] 步驟2:將起始區位碼轉為10進制,并加入到隨機值中
* [ ] 步驟3:將處理之后的10進制區位碼分別轉為高低兩個字節
* [ ] 步驟4:將字節數組按照編碼構造為String

## 問題12:增加對驗證碼的判斷(忽略大小寫)。
```
codes.equalsIgnoreCase(captcha)
```
- 1課程概述
- 2環境配置
- 3MVC
- 3.1View
- 3.1.1前端基礎
- 3.1.2JSP語法
- 3.1.3JSP內置對象1
- 3.1.4JSP內置對象2
- 3.2Bean
- 3.3Controller
- 3.3.1Servlet
- 3.3.2Filter
- 3.3.3Listener
- 3.4EL&JSTL
- 4三層架構
- 4.1數據庫操作
- 4.1.1JDBC
- 4.1.2JDBC優化
- 4.2三層架構設計
- 4.3程序優化
- 4.3.1數據庫連接優化
- 4.3.2數據庫操作優化
- 4.4安全專題
- 4.4.1Ajax異步查詢
- 4.4.2CAPTCHA
- 4.4.3MD5&SHA
- 4.4.4Cookie
- 4.4.5分頁顯示
- 4.4.6文件上傳
- 4.4.7發送郵件
- 5企業級框架
- 5.0Maven
- 5.1MyBatis
- 5.2Spring
- 5.3SpringMVC
- 6實踐項目
- 6.1實驗1-用戶登錄(MVC)
- 6.2實驗2-訪問統計(Servlet高級)
- 6.3實驗3-三層架構
- 6.4實驗4-安全信息系統