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小时内与您取得联系。