我爱Aspx >> C#.Net >> 运用每个开发者都必须了解的十个安全技巧来保护代码_ASP.NET技巧弥补的方法就是不要信任用户的输入,并且不信任 cBuffSrc 和 cbBuffSrc 中携带的任何数据:
void DoSomething(char *cBuffSrc, DWORD cbBuffSrc) {
const DWORD cbBuffDest = 32;
char cBuffDest[cbBuffDest];
#ifdef _DEBUG
memset(cBuffDest, 0x33, cbBuffSrc);
#endif
memcpy(cBuffDest, cBuffSrc, min(cbBuffDest, cbBuffSrc));
}
此函数展示了一个能够减少缓冲区溢出的正确编写的函数的三个特性。首先,它要求调用者提供缓冲区的长度。当然,您不能盲目相信这个值!接下来,在一个调试版本中,代码将探测缓冲区是否真的足够大,以便能够存放源缓冲区。如果不能,则可能触发一个访问冲突并把代码载入调试器。在调试时,您会惊奇地发现竟有如此多的错误。最后也是最重要的是,对 memcpy 的调用是防御性的,它不会复制多于目标缓冲区存放能力的数据。
在 Windows® Security Push at Microsoft(Microsoft Windows® 安全推动活动)中,我们为 C 程序员创建了一个安全字符串处理函数列表。您可以在 Strsafe.h: Safer String Handling in C(英文)中找到它们。
3. 防止跨站点脚本
跨站点脚本攻击是 Web 特有的问题,它能通过单个 Web 页中的一点隐患危害客户端的数据。想像一下,下面的 ASP.NET 代码片段会造成什么后果:
<script language=c#>
Response.Write("您好," + Request.QueryString("name"));
</script>
有多少人曾经见过类似的代码?但令人惊讶的是它有问题!通常,用户会使用类似如下的 URL 访问这段代码:
http://explorationair.com/welcome.aspx?name=Michael
该 C# 代码认为数据始终是有效的,并且只是包含了一个名称。但攻击者会滥用这段代码,将脚本和 HTML 代码作为名称提供。如果输入如下的 URL
http://northwindtraders.com/welcome.aspx?name=<script>alert('您好!');
</script>
您将得到一个网页,上面显示一个对话框,显示“您好!”。您可能会说,“那又怎样?”想像一下,攻击者可以诱导用户点击这样的链接,但查询字符串中却包含一些真正危险的脚本和 HTML,由此会得到用户的 cookie 并把它发送到攻击者拥有的网站;现在攻击者便获得了您的私人 cookie 信息,或许会更糟。
要避免这种情况,有两种方法。第一种是不信任输入,并严格限制用户名所包含的内容。例如,可以使用正则表达式检查该名称是否只包含一个普通的字符子集,并且不太大。以下 C# 代码片段显示了完成这一步骤的方法:
Ҷƪл˵?
在ASP.NET中创建安全的web站点(..[04-28]
ADO存取数据时如何实现留言记录的..[04-28]
用RecordSet实现分页(by Daniel ..[04-28]
VisualInterDev6.0七种实现分页显..[04-28]
在ASP中,用JScript脚本实现分页..[04-28]
原创的自定义分页UserControl 分..[04-28]
数据分页方法新思路,速度非常快..[04-28]
分栏显示记录集的表格演示,并实..[04-28]
用ASP实现长文章用分页符来分页显..[04-28]
Access2000数据库80万记录通用快..[04-28]
SQL Server 2005密码安全追踪与存..[04-28]
在ASP.NET中创建安全的web站点(..[04-28]
ADO存取数据时如何实现留言记录的..[04-28]
用RecordSet实现分页(by Daniel ..[04-28]
VisualInterDev6.0七种实现分页显..[04-28]
PHP 留言簿(带Oracle数据库分页..[04-28]
用PHP实现ODBC数据分页显示一例_..[04-28]
在ASP中,用JScript脚本实现分页..[04-28]
原创的自定义分页UserControl 分..[04-28]
数据分页方法新思路,速度非常快..[04-28]