标签: sql-injection

是否需要从数据库中转义用户输入?

所以我知道MySQL注入并在将它放入我的数据库之前总是转义我的所有用户输入.但是我想知道,想象一个用户试图提交一个查询注入,我逃避它.如果我稍后从数据库中获取此值并在查询中使用它,该怎么办?我必须再次逃脱吗?

所以:( sql::escape()包含我的转义功能)

$userinput = "'); DROP `table` --";
mysql_query("INSERT INTO `table` 
             (`foo`,`bar`) 
             VALUES 
             ('foobar','".sql::escape($userinput)."')");

// insert php/mysql to fetch `table`.`bar` into $output here

mysql_query("INSERT INTO `table2` 
            (`foo`,`bar`) 
            VALUES
            ('foobar','".$output."')");
Run Code Online (Sandbox Code Playgroud)

MySQL会自动转义它们的输出还是类似的东西,还是应该在第二个查询中转义?

这是一个测试用例,但这在我的程序中以其他方式发生,我想知道这样的情况下安全性有多紧.

编辑

我的逃生功能

static function escape($string){

    if(get_magic_quotes_gpc()) 
        $string = stripslashes($string); 

    return mysql_real_escape_string($string);

}
Run Code Online (Sandbox Code Playgroud)

php mysql user-input sql-injection escaping

15
推荐指数
2
解决办法
6306
查看次数

如何在Ruby中转义字符串以防止SQL注入?(没有Rails)

我只是想知道如何在Ruby中转义SQL查询(字符串)以防止SQL注入.请注意我没有使用Rails框架.

谢谢.

ruby sql-injection

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

这个PHP代码中是否存在任何安全漏洞?

我只是有一个网站来管理,但我不太确定前一个人写的代码.我正在粘贴下面的登录程序,您能看看并告诉我是否存在任何安全漏洞?乍一看,似乎可以通过SQL注入或操纵cookie和?m =参数进入.



define ( 'CURRENT_TIME', time ()); / / Current time. 
define ( 'ONLINE_TIME_MIN', (CURRENT_TIME - BOTNET_TIMEOUT)); / / Minimum time for the status of "Online". 
define ( 'DEFAULT_LANGUAGE', 'en'); / / Default language. 
define ( 'THEME_PATH', 'theme'); / / folder for the theme. 

/ / HTTP requests. 
define ( 'QUERY_SCRIPT', basename ($ _SERVER [ 'PHP_SELF'])); 
define ( 'QUERY_SCRIPT_HTML', QUERY_SCRIPT); 
define ( 'QUERY_VAR_MODULE', 'm'); / / variable contains the current module. 
define ( 'QUERY_STRING_BLANK', QUERY_SCRIPT. '? m ='); / / …

php security hash cryptography sql-injection

14
推荐指数
1
解决办法
2131
查看次数

删除所有单引号和短划线字符后的SQL注入

即使在所有"单引号"和"破折号字符"都被删除了用户的输入之后,任何人都可以在SQL注入时显示sql语句的示例吗?

SELECT MyRecord   FROM MyTable   
WHERE MyEmail='susan@site.com' AND MyPassword='foo'
Run Code Online (Sandbox Code Playgroud)

(此处不涉及INT.)

每个人似乎都说"是的,我能做到"......但当他们被迫举一个例子时......没有一个人能够表现出来.

(您可以使用任何sql引擎的任何版本,无论是新版本还是旧版本:SQL Server,MySql,SqlLite,PostgreSQL,Oracle以及其他无数版本.)

sql database database-design sql-injection

14
推荐指数
2
解决办法
9061
查看次数

用于防止SQL注入和XSS的PHP函数

我想让我的PHP尽可能安全,我想避免的两个主要问题是

  • mySQL注射
  • 跨边脚本(XSS)

这是我针对mySQL注入的脚本:

function make_safe($variable) {
$variable = mysql_real_escape_string(trim($variable)); 
return $variable;  }
Run Code Online (Sandbox Code Playgroud)

http://www.addedbytes.com/writing-secure-php/writing-secure-php-1/


针对XSS,我发现了这个:

$username = strip_tags($_POST['username']);
Run Code Online (Sandbox Code Playgroud)

现在我想把两者合二为一个函数.这是最好的方法吗?:

function make_safe($variable) {
$variable = strip_tags(mysql_real_escape_string(trim($variable)));
return $variable; }
Run Code Online (Sandbox Code Playgroud)

或者mysql_real_escape_string是否已经阻止了XSS?最后,还有什么我可以添加到此功能,以防止其他形式的黑客攻击?

php mysql xss sql-injection

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

rails 3 activerecord命令 - 什么是正确的SQL注入工作?

让我们说我有一个用户列表页面,您可以按不同的列排序,点击"电子邮件"时它将通过sort_by = email sort_direction = asc或desc

sort_by = "email" # really params[:sort_by]
sort_direction = "asc" # really params[:sort_direction]
User.order("#{sort_by} #{sort_direction}")
# SELECT "users".* FROM "users" ORDER BY email asc
Run Code Online (Sandbox Code Playgroud)

所以如果我们更改sort_by,那么按预期工作

sort_by = "email; DELETE from users; --"
User.order("#{sort_by} #{sort_direction}")
# SELECT "users".* FROM "users" ORDER BY email; DELETE from users; -- asc
Run Code Online (Sandbox Code Playgroud)

现在我们没有更多用户:(

我可以手动构建一个有效sort_by的白名单,并将params [:sort_by]与之比较,但希望有一些内置的方法来处理这种事情

sql-injection ruby-on-rails-3 ruby-on-rails-3.1

14
推荐指数
1
解决办法
2347
查看次数

如果使用hibernate,SQL-Injection有多安全

请问Hibernate防范SQL injection attack?如果我正在使用hibernate那么我是否完全免受SQL注入攻击?我听说使用用户输入Hibernate执行dynamic SQL statement构建可以允许攻击者修改语句的含义或执行任意操作SQL commands.

sql hibernate sql-injection

14
推荐指数
1
解决办法
6480
查看次数

mysqli_real_escape_string安全吗?

我是PHP新手,我意识到我的数据库连接,使用php表单(用户和传递文本输入)是完全不安全的:

这很有效,但不安全:

<?php
$link=mysqli_connect('localhost','xx','xx','xx');
$sql='  SELECT * FROM usuarios 
        WHERE username="'.$_POST['usuario'].'" 
        AND pass="'.$_POST['usuario'].'"
     ';
$rs=mysqli_query($link,$sql);
mysqli_close($link);
?>
Run Code Online (Sandbox Code Playgroud)

所以,我读过mysqli_real_escape_string,并决定尝试一下:

<?php    
$link=mysqli_connect('localhost','xx','xx','xx');
$usuario=mysqli_real_escape_string($link, $_POST["usuario"]);
$clave=mysqli_real_escape_string($link, $_POST["clave"]);
$sql='  SELECT * FROM usuarios 
        WHERE username="'.$usuario.'" 
        AND pass="'.$clave.'"
     ';
$rs=mysqli_query($link,$sql);
mysqli_close($link);
?>
Run Code Online (Sandbox Code Playgroud)

它是否正确?这是如何使用mysqli_real_escape_string的一个很好的例子吗?

php mysqli sql-injection

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

使用Like运算符在使用Like运算符的SQL查询中避免SQL注入?

从我的前任接收一些代码,我发现了一个使用Like运算符的查询:

SELECT*FROM供应商WHERE supplier_name喜欢'%'+ name +%';

试图避免SQL注入问题和参数化这个但我不太确定如何实现.有什么建议 ?

请注意,我需要一个经典ADO.NET的解决方案 - 我真的没有将这些代码转换为类似LINQ的东西.

ado.net search sql-injection sql-like

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

用于清理Mysql数据库输入的函数

我试图将一个通用功能放在一起,以清理对Mysql数据库的输入.到目前为止,这就是我所拥有的:

function sanitize($input){
    if(get_magic_quotes_qpc($input)){

        $input = trim($input); // get rid of white space left and right
        $input = htmlentities($input); // convert symbols to html entities
        return $input;
    } else {

        $input = htmlentities($input); // convert symbols to html entities
        $input = addslashes($input); // server doesn't add slashes, so we will add them to escape ',",\,NULL
        $input = mysql_real_escape_string($input); // escapes \x00, \n, \r, \, ', " and \x1a
        return $input;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我理解的定义get_magic_quotes_qpc().这是由php服务器设置为自动转义字符而不是需要使用addslashes().

我是否正确地使用过addslashes()并且 …

php mysql sanitization sql-injection

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