标签: sql-injection

参数化SQL列?

我有一些代码利用参数化查询来防止注入,但我还需要能够动态构造查询,而不管表的结构如何.这样做的正确方法是什么?

这是一个例子,说我有一个表名列,地址,电话.我有一个网页,我在其中运行显示列并使用它们作为选项填充选择下拉列表.

接下来,我有一个名为Search的文本框.此文本框用作参数.

目前我的代码看起来像这样:

result = pquery('SELECT * FROM contacts WHERE `' + escape(column) + '`=?', search);

不过,我从中得到了一种icky的感觉.我使用参数化查询的原因是为了避免使用转义.此外,转义可能不是为逃避列名而设计的.

我怎样才能确保这个按照我的意图运作?

编辑: 我需要动态查询的原因是架构是用户可配置的,我不会修复任何硬编码的东西.

sql-injection parameterized

8
推荐指数
1
解决办法
2123
查看次数

使用PHP的MySQL注入保护和漏洞标志

什么是保护MySQL注入的最佳方法?我应该注意哪些弱点?

我知道它是什么,但我真的不知道我有多脆弱.虽然我采取了(我认为是)保护自己和我的数据库的步骤.

是否有任何阻止某人的确定方法?

顺便说一句......我用PHP写的:)

php mysql database sql-injection

8
推荐指数
2
解决办法
1万
查看次数

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

实际上有2个问题

我知道我必须尽可能多地使用存储过程,但我想知道以下内容.

答:我可以从SELECT语句中获取SQL注入攻击,例如(Select*from MyTable)吗?

B: 另外,当我在ASP.NET中使用SQLDataSource时,我能获得SQL注入攻击吗?

c# sql vb.net asp.net sql-injection

8
推荐指数
2
解决办法
6977
查看次数

SQL注入保护 - 从字符串转换为int

我们都知道参数化SQL是处理用户输入和动态SQL时的方法,但是如果您要搜索的输入是数字,则从字符串转换为int(或double,或long,或其他)是有效的?

我想我要问的是,如果单独使用这种技术在SQL注入方面是绝对可靠的吗?

sql-injection

8
推荐指数
1
解决办法
3724
查看次数

阻止XSS和SQL注入就像这样容易

问题:防止XSS(跨站点脚本)strip_tags在任何已保存的输入字段上使用并htmlspecialchars在任何显示的输出上运行...并使用PHP PDO预处理语句阻止SQL注入

这是一个例子:

// INPUT: Input a persons favorite color and save to database
// this should prevent SQL injection ( by using prepared statement)
// and help prevent XSS  (by using strip_tags)
$sql = 'INSERT INTO TABLE favorite (person_name, color) VALUES (?,?)';
$sth = $conn->prepare($sql);
$sth->execute(array(strip_tags($_POST['person_name']), strip_tags($_POST['color'])));


// OUTPUT: Output a persons favorite color from the database
// this should prevent XSS (by using htmlspecialchars) when displaying
$sql = 'SELECT …
Run Code Online (Sandbox Code Playgroud)

html php xss sql-injection

8
推荐指数
2
解决办法
1万
查看次数

如何通过用户输入破坏/利用此SQL查询代码?

可能重复:
我可以通过使用单引号转义单引号和周围用户输入来防止SQL注入吗?

我们有一个遗留应用程序不使用位置参数进行查询,并且到处都有SQL.决定(在我开始之前)由于用户输入可以包含撇号,因此应该为这些撇号手动转义每个字符串输入.

这是必要的原始代码(不是由我编写的),翻译成C#以便于使用:

private string _Escape(string input)
{
    return input.Replace("'", "''");
}

private bool _IsValidLogin(string userName, string password)
{
    string sql =
        string.Format
        (
            @"SELECT COUNT(*) FROM UserAccounts
                WHERE UserName = '{0}' AND Password = '{1}'",
            _Escape(userName),
            _Escape(password)
        );
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这看起来似乎可以在某种程度上被打破,但我不知道它是如何被用户输入利用的.假设用户输入未经过滤直到它命中_IsValidLogin,并忘记密码似乎以纯文本形式存储.

支持它的解决方案是显而易见的 - 使用位置参数 - 但是我需要一些弹药来向管理人员证明这个代码为什么/如何不安全所以可以分配时间/ $来修复它.

注意:我假设这可能会被打破,但实际情况可能并非如此.我不是SQL巨星.

注2:我已将此问题表达为与数据库无关,但如果您可以将此代码用于某个引擎,我欢迎您的贡献.

sql database sql-injection database-agnostic

8
推荐指数
1
解决办法
614
查看次数

你能解释一下这个SQL注入吗?

我工作的网站最近试图被以下SQL注入脚本攻击

boys' and 3=8 union 
select 1, 
concat(0x232425,ifnull(`table_name`,0x30),char(9),ifnull(`table_rows`,0x30), char(9),0x252423),
3,4,5,6,7,8,9 

from `information_schema`.`tables` 

where table_schema=0x62646B3032 limit 44,1 -- And '8'='8
Run Code Online (Sandbox Code Playgroud)

这个注入返回了mysql表名.这是由该网站上的错误报告系统报告的,我们设法修复了该部分但是我无法理解上述注入意味着什么?

有谁能解释一下?

努伊勒

sql security sql-injection

8
推荐指数
2
解决办法
1714
查看次数

为什么mysql_real_escape_string()不应该避免任何SQL注入?

我听过有人说(关于C#/ SQL Server,但也与PHP/MySql有关):不要手动转义字符串 - 而是使用存储过程.

好的,我可以接受这个建议,但为什么呢?很多人说(包括SO)mysql_real_escape_string()就足够了,mysql_real_escape_string()很好,mysql_real_escape_string()是第一种保护方式.

为什么?有mysql_real_escape_string()可能失败的情况吗?至少一个......我不需要很多:)

php mysql security sql-injection

8
推荐指数
2
解决办法
2060
查看次数

Rails ActiveRecord - 在多个属性上搜索

我正在实现一个简单的搜索功能,它应检查username,last_name和first_name中的字符串.我在旧的RailsCast上看过这个ActiveRecord方法:

http://railscasts.com/episodes/37-simple-search-form

find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
Run Code Online (Sandbox Code Playgroud)

但是我如何设置它以便在name,last_name和first name中搜索关键字并返回记录,如果其中一个字段与该术语匹配?

我也想知道RailsCast上的代码是否容易进行SQL注入?

非常感谢!

search activerecord sql-injection ruby-on-rails ruby-on-rails-3

8
推荐指数
2
解决办法
1万
查看次数

为什么SELECT'a'='b'='c'在MYSQL中返回1?

我正在为涉及SQL注入的安全类做一些功课.我发现我可以比典型的' OR '1'=1例子做更短的SQL注入.相反,我可以做到'='.输入这个是在典型登录框的密码字段中给出一个SQL查询,如下所示:

SELECT * FROM Users WHERE username='user' AND password=''='';
Run Code Online (Sandbox Code Playgroud)

事实证明,password=''=''求值1,允许SQL注入工作.

做了一些测试后,我看到如果我测试一个字符串是否等于0,它返回1:

SELECT 0='a';
Run Code Online (Sandbox Code Playgroud)

所以在我的例子中,password=''将评估为0并0=''最终评估为1.

我的测试向我展示了这是如何发生的,但我想知道为什么会发生这种情况(即为什么是0='a'真的?

mysql sql sql-injection

8
推荐指数
1
解决办法
2472
查看次数