我在我的一个网站上看到了一些SQL注入攻击.它以查询字符串的形式出现,其中包含"cast"关键字和一堆十六进制字符,当"解码"时,这些字符是向DB中注入横幅广告.
我的解决方案是扫描完整的URL(和params)并搜索"cast(0x"的存在,如果它在那里重定向到静态页面.
你如何检查你的URL的SQL注入攻击?
Fly*_*wat 23
我不.
相反,我使用参数化SQL查询并依靠数据库来清理我的输入.
我知道,对于PHP开发人员和MySQL用户来说,这是一个新颖的概念,但使用真实数据库的人多年来一直这样做.
例如(使用C#)
// Bad!
SqlCommand foo = new SqlCommand("SELECT FOO FROM BAR WHERE LOL='" + Request.QueryString["LOL"] + "'");
//Good! Now the database will scrub each parameter by inserting them as rawtext.
SqlCommand foo = new SqlCommany("SELECT FOO FROM BAR WHERE LOL = @LOL");
foo.Parameters.AddWithValue("@LOL",Request.QueryString["LOL"]);
Run Code Online (Sandbox Code Playgroud)
我认为这取决于您要检查/防止 SQL 注入的级别。
在顶层,您可以使用 URLScan 或一些 Apache Mods/Filters(有人在这里帮助我)来检查 Web 服务器本身的传入 URL,并立即删除/忽略与特定模式匹配的请求。
在 UI 级别,您可以在提供给用户的输入字段上放置一些验证器,并设置这些字段的最大长度。您还可以根据需要将某些值/模式列入白名单。
在代码级别,您可以使用参数化查询(如上所述)来确保字符串输入作为纯字符串输入,并且不会尝试执行 T-SQL/PL-SQL 命令。
您可以在多个级别上执行此操作,并且我的大部分内容都存在后两个问题,并且我正在与我们的服务器管理员合作以将顶层内容落实到位。
这更符合您想知道的内容吗?