ASP程序开发注意的安全事项
来源:CSDN 发布时间:2010-05-03 10:55:00
永远不要相信用户输入的内容具有适当的大小或者包含适当的字符。在使用其做出决策之前应该始终对用户输入进行验证。最佳的选择是创建一个 COM+ 组件,这样您可以从 ASP 页面中调用该组件来验证用户的输入内容。您也可以使用 Server.HTMLEncode 方法、Server.URLEncode 方法,或者本页底部代码示例中的某一个。
不要通过连接用户输入的字符串来创建 ASP 页中的数据库连接字符串。恶意用户可以通过在他们的输入内容中插入代码来获取数据库的访问权限。如果您使用的是 SQL 数据库,那么请使用存储过程创建数据库连接字符串。
不要使用默认的 SQL 管理员帐户名 sa。每个使用 SQL 的用户都知道存在 sa 帐户。创建具有安全可靠密码的其他 SQL 管理帐户,并删除 sa 帐户。
在您存储客户端用户密码之前,请对这些密码使用哈希算法、进行 base64 编码,或者使用 Server.HTMLEncode 或者 Server.URLEncode 进行编码。您还可以使用本页底部的某个代码示例验证客户端密码中的字符。
不要把管理帐户名或密码放置在管理脚本或 ASP 页中。
不要根据请求标题在代码中做出决策,因为标题数据可以被恶意用户伪造。在使用请求数据前,始终要对其进行编码或者使用下面的代码示例验证其所包含的字符。
不要将安全数据存储在 Cookie 中或者将输入字段隐藏在网页中。
始终将安全套接字层 (SSL) 用于基于会话的应用程序,以避免未对会话 Cookie 进行加密就发送它们所带来的风险。如果会话 Cookie 没有经过加密,则恶意用户可以使用一个应用程序中的会话 Cookie 进入到与之在同一进程中的另一个应用程序。
当编写 ISAPI 应用程序、筛选器或者 COM+ 对象时,请注意由于变量和数据的大小而造成的缓冲区溢出。还要注意可能由于解释造成的规范化问题,例如将绝对路径名解释成相对路径名或 URL。
当在单线程单元 (STA) 内运行的 ASP 应用程序切换到多线程单元 (MTA) 内时,模拟令牌将过时。这可能导致应用程序在无模拟的情况下运行,让其用可能允许访问其他资源的进程的标识有效地运行。如果您必须切换线程模型,请在进行更改之前,先禁用该应用程序并将其卸载。
代码示例
本代码示例包含了一个函数,它可删除发送至该函数的字符串中的可能有害的字符。在上面的两个示例中,指定代码页以确保正确地编码。下面的示例使用的是 Microsoft Visual Basic® Scripting Edition(VBScript):
<%@ LANGUAGE="VBScript" %>
<%
Response.CodePage = 1252
Response.Write("Hello, " & RemoveBadCharacters(Request.Form("UserName")))
Response.Write("<BR>This is why you received an error:")
Function RemoveBadCharacters(strTemp)
Dim regEx
Set regEx = New RegExp
regEx.Pattern = "[^\s\w]"
regEx.Global = True
RemoveBadCharacters = regEx.Replace(strTemp, "")
End Function
%>
下面的示例使用的是 Microsoft JScript®:
<%@ LANGUAGE="JScript" %>
<%
Response.CodePage = 1252;
Response.Write("Hello, " + RemoveBadCharacters(Request.Form("UserName")));
Response.Write("<BR>This is why you received an error:");
function RemoveBadCharacters(strTemp) {
strTemp = strTemp.replace(/[^\s\w]/g,"");
return strTemp;
}
%>


猜你喜欢
- 概述map是基于key-value键值对的无序的集合Go语言中的map是引用类型必须初始化才能使用。语法声明和初始化配合make使用,否则是
- 本文实例讲述了JavaScript转换与解析JSON方法。分享给大家供大家参考,具体如下:json格式数据如下:var json = { &
- 一、父组件向子组件传值(props)步骤:在父组件中通过 v-bind 将数据传给子组件在子组件中通过 props 接收父组件传递过来的数据
- 引言数组是相同数据类型的一组数据的集合,数组一旦定义长度不能修改,数组可以通过下标(或者叫索引)来访问元素。相对于去声明 number0,
- 有个朋友要求帮忙绘制堆叠柱状图,查阅了一些文档之后也算是完成了,只是一个小demo,下面我就记录一下。1.什么是堆叠柱状图与并排显示分类的分
- 场景需求:需要在Flask服务器的本地找一张图片返回给前端展示出来。问题疑点:通常前端的<img>标签只会接受url的形式来展示
- --语 句 功 能 --数据操作 SELECT --从数据库表中检索数据行和列 INSERT --向数据库表添加新数据行 DELETE --
- 对于np.argmax()让我迷惑了很久,尤其是其中的axis=1的比较结果。一、np.argmax()的理解1、最简单的例子假定现在有一个
- 自从2005年8月11日阿里巴巴宣布收购雅虎中国的全部资产后,做为阿里巴巴集团的创始人马云心里盘算的事应该是如何把雅虎中虎整合进阿里巴巴这个
- el-table使用el-select选中后无效需求:表格中一行显示一条数据,数据中的某个属性要展示一列,并且再另一列中用el-select
- 前言python数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间。下面话不多说,来看看详细的介绍吧
- 除非您正在对服务进行原型设计,否则您可能会关心应用程序的内存使用情况。占用更小的内存,会使基础设施成本降低,扩展变得更容易。尽管 Go 以不
- 本篇文章以文件上传为例,聊聊 Jmeter 并发执行 Python 脚本的完整流程1. 前言大家好,我是安果!最近有小伙伴后台给我
- Python对象动态的增加属性和方法前面我们了解到数据封装、继承和多态只是面向对象程序设计中最基础的3个概念。在Python中,面向对象还有
- 2012年,Hinton的学生Alex Krizhevsky提出了深度卷积神经网络模型AlexNet,它可以算是LeNet的一种更深更宽的版
- 对于一个多维数组(以二维数组为例),经常需要获取到其中的一列,比如有几条用户数据,是一个二维数组,现在需要获取到这几个用户的名字,可以有多种
- vue更新到2.0之后,作者就宣告不再对vue-resource更新,而是推荐使用axios。前段时间第一次在项目里用到vue,关于登陆问题
- 本文实例讲述了Python3对称加密算法AES、DES3。分享给大家供大家参考,具体如下:python3.6此库安装方式,需要pip3 in
- 前言开发中我们或多或少会涉及到一些场景需要使用延时操作,而延时操作其实并不是一个很好的选择,并不是一个很好的方案,因为它不可控,也可能产生时
- python是一个很有趣的语言,可以在命令行窗口运行。python中有很多功能强大的模块,这篇经验告诉你,如何使用python的pygal模