Web应用程序的威胁与对策(13)
时间:2025-07-09
时间:2025-07-09
使用 HTMLEncode 和 URLEncode 函数来对任何包含用户输入的输出进行编码。这会将可执行脚本转换为无害的
HTML。
SQL 插入
SQL 插入攻击利用输入验证中的漏洞来在数据库中运行任意命令。当您的应用程序使用输入来构造动态 SQL 语句以访问数据库时,可能出现这种攻击。如果您的代码使用的存储过程传递了包含未筛选的用户输入的字符串,则也可能出现这种攻击。使用 SQL 插入攻击,攻击者可以在数据库中执行任意命令。如果应用程序使用越权帐户来连接到数据库,则此问题将会更加严重。在这种情况下,使用数据库服务器来运行操作系统命令是可能的,但会潜在地危及其他服务器的安全,而且还会检索、操纵和损坏数据。 SQL 插入示例
当您的数据库查询中包括未经验证的用户输入时,您的应用程序可能很容易受到 SQL 插入攻击。特别容易受到影响的是用未筛选的用户输入构造动态 SQL 语句的代码。考虑以下代码:
复制代码
SqlDataAdapter myCommand = new SqlDataAdapter(
"SELECT * FROM Users
WHERE UserName ='" + txtuid.Text + "'", conn);
攻击者可以通过终止特定的 SQL 语句来插入 SQL,方法是使用单引号字符加分号字符开始一个新命令,然后执行他们自己选择的命令。考虑下面输入到 txtuid 字段的字符串。
复制代码
'; DROP TABLE Customers -
这将导致以下语句提交给数据库以执行。
复制代码
SELECT * FROM Users WHERE UserName=''; DROP TABLE Customers --'
假定应用程序的登录具有足够的数据库权限,则此语句会删除客户表格(这也是在数据库中使用最低特权的另一个原因)。双短划线 (--) 表示 SQL 注释,用来对程序员所添加的任何其他字符(例如右引号)进行注释。
注意 分号实际上并非必需。SQL Server 将执行由空格分开的两个命令。
还可执行其他更具欺骗性的命令。将以下内容输入到 txtuid 字段: