所以我知道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) 我只是想知道如何在Ruby中转义SQL查询(字符串)以防止SQL注入.请注意我没有使用Rails框架.
谢谢.
我只是有一个网站来管理,但我不太确定前一个人写的代码.我正在粘贴下面的登录程序,您能看看并告诉我是否存在任何安全漏洞?乍一看,似乎可以通过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 ='); / / …
即使在所有"单引号"和"破折号字符"都被删除了用户的输入之后,任何人都可以在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以及其他无数版本.)
我想让我的PHP尽可能安全,我想避免的两个主要问题是
这是我针对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?最后,还有什么我可以添加到此功能,以防止其他形式的黑客攻击?
让我们说我有一个用户列表页面,您可以按不同的列排序,点击"电子邮件"时它将通过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]与之比较,但希望有一些内置的方法来处理这种事情
请问Hibernate防范SQL injection attack?如果我正在使用hibernate那么我是否完全免受SQL注入攻击?我听说使用用户输入Hibernate执行dynamic SQL statement构建可以允许攻击者修改语句的含义或执行任意操作SQL commands.
我是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的一个很好的例子吗?
从我的前任接收一些代码,我发现了一个使用Like运算符的查询:
SELECT*FROM供应商WHERE supplier_name喜欢'%'+ name +%';
试图避免SQL注入问题和参数化这个但我不太确定如何实现.有什么建议 ?
请注意,我需要一个经典ADO.NET的解决方案 - 我真的没有将这些代码转换为类似LINQ的东西.
我试图将一个通用功能放在一起,以清理对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()并且 …
sql-injection ×10
php ×5
mysql ×3
sql ×2
ado.net ×1
cryptography ×1
database ×1
escaping ×1
hash ×1
hibernate ×1
mysqli ×1
ruby ×1
sanitization ×1
search ×1
security ×1
sql-like ×1
user-input ×1
xss ×1