SP.NET 類參考手冊
方法 | 描述 |
---|---|
AsBool(), AsBool(true|false) | 轉換字符串值為布爾值(true/false)。如果字符串不能轉換為true/false,則返回 false 或者其他規定的值。 |
AsDateTime(), AsDateTime(value) | 轉換字符串值為日期/時間。返回 DateTime。如果字符串不能轉換為日期/時間,則返回 MinValue 或者其他規定的值。 |
AsDecimal(), AsDecimal(value) | 轉換字符串值為十進制值。如果字符串不能轉換為十進制值,則返回 0.0 或者其他規定的值。 |
AsFloat(), AsFloat(value) | 轉換字符串值為浮點數。如果字符串不能轉換為浮點數,則返回 0.0 或者其他規定的值。 |
AsInt(), AsInt(value) | 轉換字符串值為整數。如果字符串不能轉換成整數,則返回 0 或者其他規定的值。 |
Href(path [, param1 [, param2]]) | 從帶有可選的附加路徑部分的本地文件路徑創建一個瀏覽器兼容的 URL。 |
Html.Raw(value) | Renders value 呈現為 HTML 標記,而不是呈現為 HTML 編碼輸出。 |
IsBool(), IsDateTime(), IsDecimal(), IsFloat(), IsInt() | 如果該值可以從字符串轉換為指定的類型,則返回 true。 |
IsEmpty() | 如果對象或者變量沒有值,則返回 true。 |
IsPost | 如果請求是 POST,則返回 true。(初始請求通常是 GET。) |
Layout | 規定布局頁面的路徑應用到此頁面。 |
PageData[key], PageData[index], Page | 在當前請求的頁面、布局頁面、部分頁面之間包含共享數據。您可以使用動態頁面來對相同的數據進行屬性訪問。 |
RenderBody() | (Layout pages) 呈現沒有在布局頁面任何命名區域的內容頁的內容Renders the content of a content page that is not in any named sections. |
RenderPage(path, values) RenderPage(path[, param1 [, param2]]) | 呈現使用了規定的路徑和可選的額外數據的內容頁。您可以通過 position(實例 1)或者 key(實例 2)從 PageData 獲取額外參數的值。 |
RenderSection(sectionName [, required=true|false]) | (Layout pages) 呈現一個有名字的內容區域。設置 required讓一個區域為必需非可選的。 |
Request.Cookies[key] | 獲取或者設置 HTTP cookie 的值。 |
Request.Files[key] | Gets 在當前請求中上傳的文件。 |
Request.Form[key] | 獲取在表單中 post 的數據(作為字符串)。Request.Form 和 Request.QueryString 都要求[key] 檢查。 |
Request.QueryString[key] | 獲取 URL 查詢字符串中規定的數據。Request.Form 和 Request.QueryString 都要求[key] 檢查。 |
Request.Unvalidated(key) Request.Unvalidated().QueryString|Form|Cookies|Headers[key] | 有選擇地禁用請求驗證(表單元素、查詢字符串值、cookie、header 值)。請求驗證默認是開啟的,防止用戶提交標記或者其他潛在的危險內容。 |
Response.AddHeader(name, value) | 在應答中添加一個 HTTP 服務器響應頭。 |
Response.OutputCache(seconds [, sliding] [, varyByParams]) | Caches 在指定時間的頁面輸出緩存。設置 sliding 來重置每個頁面的訪問超時時間,設置 varyByParams 為請求頁面的每個不同的查詢字符串緩存不同版本的頁面。 |
Response.Redirect(path) | 重定向瀏覽器請求到一個新的位置。 |
Response.SetStatus(httpStatusCode) | 設置HTTP狀態代碼發送到瀏覽器。 |
Response.WriteBinary(data [, mimetype]) | 寫入 data 內容響應可選的MIME類型。 |
Response.WriteFile(file) | 寫入文件內容響應。 |
@section(sectionName) { content } | (布局頁面)定義一個有名字的內容區域。 |
Server.HtmlDecode(htmlText) | 解碼一個HTML編碼的字符串。 |
Server.HtmlEncode(text) | 為呈現在 HTML 標記中的字符串編碼。 |
Server.MapPath(virtualPath) | 為指定的虛擬路徑返回服務器的物理路徑。 |
Server.UrlDecode(urlText) | 解碼URL文本。 |
Server.UrlEncode(text) | URL文本編碼。 |
Session[key] | 獲取或設置一個存在的值,直到用戶關閉瀏覽器。 |
ToString() | 顯示一個用字符串表示的對象的值。 |
UrlData[index] | 從 URL 獲取額外的數據(例如,/MyPage/ExtraData)。 |
碼分為很多種,針對HTML代碼的編碼方式是HtmlEncode
一般來說,要對抗XSS,在編碼函數中,至少要實現下列內容:
&-->&
<--><
>-->&ht;
"-->"
'-->
/-->/
以下是使用JAVA代碼的實現形式:
在軟件、Web應用、App等程序都已經成為了企業的命脈。數據的安全一直都是企業最關心的問題。
今天給大家推薦的就是騰訊面向開發人員梳理的代碼安全指南,針對API層面的風險點并提出建議和解決方案。
安全指南涵蓋非常全面,可以用于
1、日常編程參考
2、系統掃描策略
3、安全組件開發
4、安全漏洞的修復指南
1、必須
2、建議
3、推薦
1、C/C++安全指南
2、JavaScript安全指南
3、Node安全指南
4、Go安全指南
5、Java安全指南
6、Python安全指南
下面給大家舉例幾個常用安全指南。
a、【Java安全指南1】SQL語句默認使用預編譯并綁定變量
Web后臺系統應默認使用預編譯綁定變量的形式創建sql語句,保持查詢語句和數據相分離。以從本質上避免SQL注入風險。
如使用Mybatis作為持久層框架,應通過#{}語法進行參數綁定,MyBatis 會創建 PreparedStatement 參數占位符,并通過占位符安全地設置參數。
示例:JDBC
String custname = request.getParameter("name");
String query = "SELECT * FROM user_data WHERE user_name = ? ";PreparedStatement pstmt = connection.prepareStatement( query );pstmt.setString( 1, custname);
ResultSet results = pstmt.executeQuery( );
Mybatis
<select id="queryRuleIdByApplicationId" parameterType="java.lang.String" resultType="java.lang.String">
select rule_id from scan_rule_sqlmap_tab where application_id=#{applicationId}
</select>
應避免外部輸入未經過濾直接拼接到SQL語句中,或者通過Mybatis中的傳入語句(即使使用,語句直接拼接外部輸入也同樣有風險。例如中部分參數通過傳入SQL語句(即使使用PreparedStatement,SQL語句直接拼接外部輸入也同樣有風險。例如Mybatis中部分參數通過{}傳入SQL語句后實際執行時調用的是PreparedStatement.execute(),同樣存在注入風險)。
b、【Java安全指南2】文件類型限制
須在服務器端采用白名單方式對上傳或下載的文件類型、大小進行嚴格的限制。僅允許業務所需文件類型上傳,避免上傳.jsp、.jspx、.class、.java等可執行文件。參考示例:
String file_name=file.getOriginalFilename();
String[] parts=file_name.split("\.");
String suffix=parts[parts.length - 1];
switch (suffix){
case "jpeg":
suffix=".jpeg";
break;
case "jpg":
suffix=".jpg";
break;
case "bmp":
suffix=".bmp";
break;
case "png":
suffix=".png";
break;
default:
//handle error
return "error";
}
【必須】禁止外部文件存儲于可執行目錄
禁止外部文件存儲于WEB容器的可執行目錄(appBase)。建議保存在專門的文件服務器中。
【建議】避免路徑拼接
文件目錄避免外部參數拼接。保存文件目錄建議后臺寫死并對文件名進行校驗(字符類型、長度)。建議文件保存時,將文件名替換為隨機字符串。
【必須】避免路徑穿越
如因業務需要不能滿足1.2.3的要求,文件路徑、文件命中拼接了不可行數據,需判斷請求文件名和文件路徑參數中是否存在../或..\(僅windows), 如存在應判定路徑非法并拒絕請求。
c、【JavaScript安全指南1】【必須】HTML標簽操作,限定/過濾傳入變量值
使用innerHTML=、outerHTML=、document.write()、document.writeln()時,如變量值外部可控,應對特殊字符(&, <, >, ", ')做編碼轉義,或使用安全的DOM API替代,包括:innerText=
// 假設 params 為用戶輸入, text 為 DOM 節點
// bad:將不可信內容帶入HTML標簽操作
const { user }=params;
// ...
text.innerHTML=`Follow @${user}`;
// good: innerHTML操作前,對特殊字符編碼轉義
function htmlEncode(iStr) {
let sStr=iStr;
sStr=sStr.replace(/&/g, "&");
sStr=sStr.replace(/>/g, ">");
sStr=sStr.replace(/</g, "<");
sStr=sStr.replace(/"/g, """);
sStr=sStr.replace(/'/g, "'");
return sStr;
}
let { user }=params;
user=htmlEncode(user);
// ...
text.innerHTML=`Follow @${user}`;
// good: 使用安全的DOM API替代innerHTML
const { user }=params;
// ...
text.innerText=`Follow @${user}`;
私信回復:1021
*請認真填寫需求信息,我們會在24小時內與您取得聯系。