asp-classic - 准备好的报表和清理数据
问题描述
在经典 ASP 中使用准备好的语句时,例如:
SQL = "SELECT user_name, user_sign_up_date FROM tbl_users WHERE this = ? AND id = ? "
Set stmt01 = Server.CreateObject("ADODB.Command")
stmt01.ActiveConnection = oConn
stmt01.Prepared = true
stmt01.commandtext = SQL
stmt01.Parameters.Append stmt01.CreateParameter("@x1", adVarChar, adParamInput, 255, card_pwd)
stmt01.Parameters.Append stmt01.CreateParameter("@x2", adInteger, adParamInput, , this_id)
set myRS = stmt01.Execute
除了进行通常的意义检查以确保数字是数字等之外,使用这种参数化语句的过程是否意味着我不再需要担心,例如对于 varchar 或文本字段,清理用户输入的数据——例如,我是否不再需要使用函数来推送用户输入的所有内容Server.HTMLencode
?
我不确定参数化语句路由是否意味着我可以不那么严格。现在清理用户数据?
解决方案
您将两种不同类型的消毒混为一谈。SQL 参数化可防止“Bobby Tables”漏洞——一种恶意写入的数据位,可诱使 SQL 结束当前查询并执行攻击者选择的单独查询。
即使使用 SQL 参数,攻击者也可以通过(例如)在字段中输入“alert('Gotcha!')”来尝试在您的页面上运行脚本。在 HTML 页面上显示字段数据,然后写出并执行该脚本。为了防止你使用Server.HTMLencode
推荐阅读
- wagtail - 将 Wagtail 项目部署到另一台服务器/PC 时出错
- c++ - Winapi - Eclipse SWT GUI 窗口的本机 WinProc 的 JNA 实现存在问题
- wordpress - 而不是 index.php 文件 localhost 显示 apache 默认页面
- javascript - react-redux - 在钩子文档中,为什么在调用 createSelector() 时选择器的参数放在单独的参数选择器中?
- python - 将单通道图像的像素设置为透明的最简单方法是什么?
- python - 使用 Python Subprocess 从 SQL Server 优化 BCP 导出的任何建议
- kubernetes - 如何将 Kubernetes Cronjob 设置为在特定的最短时间运行?
- jakarta-ee - WAS 9 迁移问题 ContextNotActiveException
- python - 使用 Python 2.7 将俄语的 Unicode 插入 Oracle DB
- html - CSS - 将可排序列表居中对齐