回答

收藏

我可以从SELECT语句中获得SQL注射攻击吗?

技术问答 技术问答 250 人阅读 | 0 人回复 | 2023-09-14

实际上有两个问题:
. ?5 o( g1 x& X2 O' [我知道我必须尽可能多地使用存储过程,但是我想知道以下内容。4 U/ e3 u9 G6 O. q% T: [; h. g
答:    我可以从SELECT例如(从MyTable中选择*))获得SQL注射攻击吗?
! J2 s" y$ W1 U! e# qB:    另外,当我在的时候ASP.NET中使用SQLDataSource时间,能不能遭受?SQL注入攻击?: a" ~# T: ?5 l! n" W& w( Q2 ^; i
                                                                . U& c: {2 ]! u! M# u. d6 Z
    解决方案:                                                                2 [# U1 Z% Y) M0 @* i
                                                                回答你的问题。
0 w7 @- O4 L% h# e答:    是的,你可以从任何  开始接受参数的    查询 2 Q  T7 h5 K" S- j: [2 E2 C0 W
获得SQL注入攻击(即使你不使用平台提供的方法,也通过SQL调用执行,也可调用存储过程)。
1 X: [$ I" C! m* C" g2 Q2 g4 n9 a我被要求提供一个即使使用存储过程也可以注射的示例。我看到开发的应用程序确实使用存储过程,但这是这样的:6 C6 d2 m5 _6 e! Q0 C) j0 y0 V+ [
// C# - DON'T DO THIS!String regionName = assignedSomewhereElse();SQLCommand sqlCmd = DatabaseConnection.CreateCommand();SQLCommand sqlCmd.CommandText =    String.Format("EXECUTE sp_InsertNewRegion '{0}'",regionName);sqlCmd.ExecuteNonQuery();显然,这不是调用存储过程的方法。您应该使用平台的抽象或参数化查询。
2 p3 _/ c9 m8 T! x2 u: O0 WB:    SQLDataSource是数据库的抽象层。它将为您创建SQL查询并自动清除,防止注入。
) [" S8 Q# D0 f/ F6 Q2 k/ [4 B: u9 e为避免注入,可执行以下操作:& U, z& Q9 t+ _1 ?
清理输入* h3 i0 H9 k, ^
使用平台提供的抽象层。
" _  h; _, Q% d3 {. C* Z使用参数化查询。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则