标签: sql-injection

SQL注入今天是否存在风险?

我一直在阅读有关SQL注入攻击以及如何避免它们的内容,尽管我似乎永远无法在工作中制作"糟糕"的例子,例如看到这篇文章.

我在数据库中创建了一个PHP文件和一个表,有一个值传递$_GET并尝试通过执行删除表bob'); drop table students; --,但它不起作用.PHP自动转义\'并且查询有错误,没有造成任何伤害.尝试复制登录"攻击" AND WHERE 1=1等时出现同样的问题.

示例代码:

<?php
$id = $_GET['id'];

$sql = "INSERT INTO Users (Username) VALUES ($id)";
echo $sql;
mysql_query($sql) or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)

而且我会通过 sql.php?id=1); delete from Users; --

那么这个过时的东西过去常常适用于PHP3或者什么东西,现在甚至新手都不受魔法引号之类的保护?

我在Ubuntu上使用PHP5.

php sql sql-injection

36
推荐指数
12
解决办法
4007
查看次数

经典的ASP SQL注入保护

什么是防止经典asp应用程序的SQL注入的强大方法?

仅供参考我正在使用访问数据库.(我没有写应用程序)

security ms-access sql-injection asp-classic

34
推荐指数
2
解决办法
5万
查看次数

preparedStatement是否避免SQL注入?

我已阅读并尝试将易受攻击的SQL查询注入我的应用程序.这不够安全.我只是使用Statement Connection进行数据库验证和其他插入操作.

preparedStatements安全吗?而且这个陈述也会有问题吗?

java sql-injection jdbc prepared-statement

34
推荐指数
1
解决办法
3万
查看次数

SQL查询参数化如何工作?

我觉得这有点傻,因为我似乎是世界上唯一一个没有得到它的人,但无论如何都要去.我将以Python为例.当我使用原始SQL查询(我通常使用ORM)时,我使用参数化,就像使用SQLite的这个例子一样:

方法A:

username = "wayne"
query_params = (username)
cursor.execute("SELECT * FROM mytable WHERE user=?", query_params)
Run Code Online (Sandbox Code Playgroud)

我知道这有效,我知道这是一般推荐的方法.一个SQL注入易受影响的方法来做同样的事情将是这样的:

方法B:

username = "wayne"
cursor.execute("SELECT * FROM mytable WHERE user='%s'" % username)
Run Code Online (Sandbox Code Playgroud)

到目前为止,我可以告诉我理解SQL注入,正如本维基百科文章中所解释的那样.我的问题很简单:方法A与方法B有什么不同?为什么方法A的最终结果与方法B不同?我假设该cursor.execute()方法(Python的DB-API规范的一部分)负责正确转义和输入类型检查,但这在任何地方都没有明确说明.在这种情况下,这就是所有参数化吗?对我来说,当我们说"参数化"时,所有这些都意味着"字符串替换",如%-formatting.这是不正确的?

sql security sql-injection

33
推荐指数
1
解决办法
4871
查看次数

网站已被SQL注入攻击

最近我的网站被SQL注入攻击.黑客使用以下查询来获取我的数据库名称.我无法理解他们写的这个查询.

查询:

=-999.9%20UNION%20ALL%20SELECT%20concat(0x7e,0x27,Hex(cast(database()%20as%20char)),0x27,0x7e),0x31303235343830303536,0x31303235343830303536,0x31303235343830303536--
Run Code Online (Sandbox Code Playgroud)

查询运行后显示整数结果,如" 74545883".

你能解释一下查询是如何工作的吗?

mysql sql-injection

33
推荐指数
3
解决办法
3万
查看次数

有人攻击了我的数据库 - 怎么样?

有人攻击了我的数据库并放弃了该表.

在我的PHP页面中有一个单独的查询,我在使用mysql_real_escape_string:

$db_host="sql2.netsons.com";
$db_name="xxx";
$username="xxx";
$password="xxx";    

$db_con=mysql_connect($db_host,$username,$password);    

$connection_string=mysql_select_db($db_name);
mysql_connect($db_host,$username,$password);    
mysql_set_charset('utf8',$db_con); 

$email= mysql_real_escape_string($_POST['email']);
$name= mysql_real_escape_string($_POST['name']);
$sex= mysql_real_escape_string($_POST['sex']);    

if($_POST['M']!=""){  $sim = 1;  }else {  $sim = 0;   }

$query = "INSERT INTO `users` (`email`, `name`, `sex`, `M`) VALUES
( '".$email."', '".ucwords(strtolower($name))."', '".$sex."','".$sim."')";    

$res = mysql_query($query) or die("Query fail: " . mysql_error() );

mysql_close($db_con);
Run Code Online (Sandbox Code Playgroud)

register_globals禁用.

那么,我的数据库是怎么被黑了的?

php mysql sql-injection

32
推荐指数
2
解决办法
9721
查看次数

在数据库查询字符串中转义引号的好方法?

我已经尝试了各种各样的Python模块,它们要么逃避太多,要么以错误的方式逃脱.你在Python中找到逃避引号(",")的最佳方法是什么?

python database sql-injection escaping

31
推荐指数
5
解决办法
8万
查看次数

Rails SQL注入?

在Rails中,当我想通过用户找到给定的值并避免SQL注入(转义撇号等)时,我可以这样做:

Post.all(:conditions => ['title = ?', params[:title]])
Run Code Online (Sandbox Code Playgroud)

我知道这样做的一种不安全的方式(可能的SQL注入)是这样的:

Post.all(:conditions => "title = #{params[:title]}")
Run Code Online (Sandbox Code Playgroud)

我的问题是,以下方法是否会阻止SQL注入?

Post.all(:conditions => {:title => params[:title]})
Run Code Online (Sandbox Code Playgroud)

security sql-injection ruby-on-rails

31
推荐指数
3
解决办法
1万
查看次数

如何在codeigniter中避免sql注入

在CodeIgniter中,如何避免sql注入?是否有任何方法在配置文件中设置以避免sql注入?我正在使用此代码来选择值:

$this->db->query("SELECT * FROM tablename WHERE var='$val1'");
Run Code Online (Sandbox Code Playgroud)

这用于插入值:

$this->db->query("INSERT INTO  tablename (`var1`,`var2`) VALUES ('$val1','$val2')");
Run Code Online (Sandbox Code Playgroud)

用于从数据库中插入和选择值的另一种方法是CodeIgniter insert()get()方法.使用CodeIgniter的bulit-in函数时是否有机会进行sql注入

sql-injection codeigniter function built-in data-security

31
推荐指数
2
解决办法
4万
查看次数

SQL注入?CHAR(45,120,49,45,81,45)

我刚看到这个出现在我们的请求日志中.他们想要实现什么目标?

完整的请求字符串是:

properties?page=2side1111111111111 UNION SELECT CHAR(45,120,49,45,81,45),CHAR(45,120,50,45,81,45),CHAR(45,120,51,45,81,45),CHAR(45,120,52,45,81,45),CHAR(45,120,53,45,81,45),CHAR(45,120,54,45,81,45),CHAR(45,120,55,45,81,45),CHAR(45,120,56,45,81,45),CHAR(45,120,57,45,81,45),CHAR(45,120,49,48,45,81,45),CHAR(45,120,49,49,45,81,45),CHAR(45,120,49,50,45,81,45),CHAR(45,120,49,51,45,81,45),CHAR(45,120,49,52,45,81,45),CHAR(45,120,49,53,45,81,45),CHAR(45,120,49,54,45,81,45) -- /*
Run Code Online (Sandbox Code Playgroud)

编辑:由于谷歌搜索没有返回任何有用的东西,我想问那些遇到同样事情的人.

sql-injection

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