我正在尝试编写一个php函数来阻止MySQL注入尝试.我正在做的是使用str_replace()删除符号并用它们的HTML字符代码替换它们.我的问题是代码都包含 但我也想用他们的代码替换这些符号.如何在不将代码更改为以下内容的情况下执行此操作:
&;&338;#35;32;
Run Code Online (Sandbox Code Playgroud)
这是我的功能:
function replaceSymbols( $text )
{
$text = str_replace( '#', '#', $text );
$text = str_replace( '&', '&' $text );
$text = str_replace( ';', ';', $text );
$text = str_replace( ' ', ' ' $text );
$text = str_replace( '!', '!' $text );
$text = str_replace( '"', '"' $text );
$text = str_replace( '$', '$' $text );
$text = str_replace( '%', '%' $text );
$text = str_replace( "'" ''', $text );
$text = str_replace( '(', '(' $text ); …Run Code Online (Sandbox Code Playgroud) 它们不像SQL注入那样容易受到攻击mysql_query("SELECT important_data FROM users WHERE password = $password")吗?
我有自由格式文本的字段,并允许任何数字/符号的组合.验证这些以防止SQL注入的最佳方法是什么?我可以简单地替换刻度线吗?有没有可以插入使用的方法?
我不太了解sql注入.
我想知道在mysql中阻止sql注入的最佳方法是什么?
就像我应该如何在数据库中插入数据一样,我应该如何从数据库中获取数据,如何执行搜索查询,在mysql中更新查询.
到这里我知道addslashes用于防止使用php在mysql中进行sql注入.
当它从数据库中搜索数据时创建问题.我在这里描述的问题. 在mysql查询中搜索问题
你能告诉我如何防止这种情况吗?我听说过mysql_real_escape_string 但不知道如何使用它.
谢谢
阿维纳什
清理可能被sqlinjected的所有数据是一个好的或愚蠢的想法吗?我写了一个应该这样做的功能,但是我从来没有看过它,并且想知道这是不是一个糟糕的主意.我写的功能:
function sanitizeData()
{
$_SERVER['HTTP_USER_AGENT'] = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);
foreach(array_keys($_COOKIE) as $key)
{
$_COOKIE[$key] = mysql_real_escape_string($_COOKIE[$key]);
}
foreach(array_keys($_POST) as $key)
{
$_POST[$key] = mysql_real_escape_string($_POST[$key]);
}
foreach(array_keys($_GET) as $key)
{
$_GET[$key] = mysql_real_escape_string($_GET[$key]);
}
}
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我像这样使用string.Format()作为SQL
Dim strSQL As String = "SELECT X FROM MY_TABLE WHERE Y <> {0} AND Z = '{1}'"
strSQL = String.Format(strSQL, otherObj.Y, myObj.Z)
Run Code Online (Sandbox Code Playgroud)
有一天,我使用SQL注入进行全局"压力"测试(带引号的params,以及类似的东西)并发现了很多错误...
.NET中与它"斗争"的最佳方式是什么?是否有一个String.Format或其他常见的方法来正确(和安全地)使用SQL查询中的SQL参数.
您会建议更换String.Format什么?
我只是想知道,如果我每更换'用''的用户输入,例如string.Replace("'","''"),和验证号码(确保它们是数字,不包含任何其他字符),是SQL注入仍然是可能的?怎么样?
我正在使用动态SQL查询SqlCommand.像这样的东西:
cmd.CommandText = "SELECT * FROM myTable WHERE ID = " + theID.ToString();
Run Code Online (Sandbox Code Playgroud)
要么
cmd.CommandText = "UPDATE myTable SET title='" + title.Replace("'","''") + "' WHERE ID = " + theID.ToString();
Run Code Online (Sandbox Code Playgroud)
在ASP.NET MVC中自动验证输入整数(检查它们是否是实数).
我正在尝试执行命令,但我需要删除空格.
这是我想要执行的命令,但它有两个空格:
DROP TABLE Table_1
Run Code Online (Sandbox Code Playgroud)
我想要做的是将其转换为没有空格的形式.我以为我可以使用连接和CHAR字符串函数来生成要执行的字符串:
'DROP'+CHAR(32)+'TABLE'+CHAR(32)+'Table_1'
Run Code Online (Sandbox Code Playgroud)
我试过这个并将它传递给EXEC,但这显然是无效的:
';EXEC('DROP'+CHAR(32)+'TABLE'+CHAR(32)+'Table_1');--
Run Code Online (Sandbox Code Playgroud)
然后我考虑在@declaring临时变量的许多行上构造字符串,但为此我似乎再次需要空格.
有办法做到这一点吗?
我的应用程序有很多使用Statement编写的JDBC查询,因此容易受到SQL注入的攻击.不幸的是,这个应用程序是在大约10年前开发的,可能开发人员不知道Prepared语句.
我知道解决这个问题的最好方法是使用PreparedStatement,但在整个应用程序中转换它是非常繁琐的.此外,为SQL注入编写任何类型的Patten匹配可能非常棘手,因为Select,insert,union等关键字都是英文单词,也可能出现在用户键入的文本字段中.
有没有更聪明的方法来避免SQL注入而不使用Prepared语句.如果这是一个重复的问题,请给我一个问题的链接,它有一个很好的答案.谢谢您的帮助.
我正在尝试(合法地)利用具有SQLi漏洞的MariaDb数据库。
我在这里发现了漏洞...
/?o=1&page=app
将o=*是脆弱的,并产生下列错误...
DEBUG INFO: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '5' or dest like '1'') LIMIT 10' at line 1
我正在使用Burp Suite,并采用了以下语法,该语法似乎更接近商标,但仍会产生语法错误。
我认为它离商标更近了,因为错误只会吐出我介绍的查询,而不是“额外”字段:'5' or dest like '1'') LIMIT 10'。
我假设这是原始查询的一部分,因为1它包含在内,当我使用其他随机字符串进行测试时,它仍然为真。
我从页面提示中知道的管理员密码哈希值是uid 1。
这个查询我缺少什么?
SELECT Password FROM mysql.user WHERE (uid = '1' or dest like '%')-- ') LIMIT 10
编辑:这是在Hack The Box上完成的,所以没有讨厌的非法事情发生。