相关疑难解决方法(0)

围绕mysql_real_escape_string()的SQL注入

即使使用mysql_real_escape_string()函数,是否存在SQL注入的可能性?

考虑这个示例情况.SQL是用PHP构造的,如下所示:

$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));

$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";
Run Code Online (Sandbox Code Playgroud)

我听过很多人对我说,这样的代码仍然很危险,即使使用了mysql_real_escape_string()函数也可以破解.但我想不出任何可能的漏洞?

像这样的经典注射:

aaa' OR 1=1 --
Run Code Online (Sandbox Code Playgroud)

不工作.

你知道任何可能通过上面的PHP代码注入的注入吗?

php mysql sql security sql-injection

596
推荐指数
4
解决办法
22万
查看次数

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

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

在我的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
查看次数

mysql_real_escape_string可以防止各种sql注入吗?

可能重复:
围绕mysql_real_escape_string()的SQL注入

我没有看到任何有价值的信息或没有过时的信息.所以,有一个问题:mysql_real_escape_string()是否完全防止SQL注入?然而它是非常过时的(它来自'09),因此在12月的php 5.3和mysql 5.5中,它是否完全保护?

php mysql sql sql-injection

11
推荐指数
1
解决办法
8588
查看次数

mysql_real_escape_string对Anti SQL注入是否足够?

在PHP手册中,有一个注释:

注意:如果此函数不用于转义数据,则查询容易受到SQL注入攻击.

这足以反sql注入吗?如果没有,你能举一个例子和一个很好的解决方案来反sql注入吗?

php mysql sql-injection

7
推荐指数
1
解决办法
8437
查看次数

PHP mysql注入保护

我写了这个简短的函数来防止my_sql注入,因为它的重要性我只想与其他人仔细检查这将按照我的意图运行.

foreach($_REQUEST as $key => $value) {          
    $_REQUEST[$key] = stripslashes($value);
    $_REQUEST[$key] = mysql_real_escape_string($_REQUEST[$key]);
} 
Run Code Online (Sandbox Code Playgroud)

php mysql sql-injection code-injection

6
推荐指数
2
解决办法
6253
查看次数

如何在使用mysql_real_escape_string时进行SQL注入

这被标记为重复,但我不认为这是一个公平的判断.这个问题再一次被简单地回答了......但这不是正确的答案.如果从实际的帖子表单中使用"重复"答案,则它不起作用.它被拒绝就像所有其他尝试一样.我实际上已多次使用该答案,它几乎出现在每个SQL注入备忘单上.请将此标记为重复标记.

这个问题纯粹是为了理解,而不是用于访问其他网站.我多次读过MySQL转义不足以保护自己免受SQL注入.因此,我设置了多个测试页面来尝试SQL注入.我成功了一些,但从未使用过该mysql_real_escape_string()功能.

我已经研究并尝试过许多来自备忘单的例子,但不能破解这个,所以我觉得它足够安全或足够安全.有人能举个例子吗?也许是为什么这个登录是不安全的原因和一个绕过登录和/或改变表的示例输入?

我打算也使用MySQLi.在这个例子中,我使用MySQL来询问与MySQLi相比这可能导致SQL注入问题的位置(另一个声明,但我从未见过证明).

这是某人有机会证明不安全感,而不仅仅是说它是不安全的.

if (isset($_POST['aun'])) {
  $username = mysql_real_escape_string($_POST['aun']);
  $checkadminlogin = mysql_query("SELECT * FROM admin WHERE un='$username'");
  $uncreds = mysql_fetch_assoc($checkadminlogin);
  $pass = mysql_real_escape_string($_POST['apwd']);
  //Line to get key for encrypting input password, used below as $keyinfo['op_value'];
  $salt = $keyinfo['op_value'];
  $fpass = sha1($pass . $salt);
  if ($fpass == $uncreds['pwd']) {
    echo 'Congrats, you logged in. Or hacked your way in. Whatever';
  }
}
Run Code Online (Sandbox Code Playgroud)

另外在旁注,你不能只是替换所有特殊字符以防止任何注射吗?

php mysql mysqli sql-injection mysql-real-escape-string

5
推荐指数
0
解决办法
160
查看次数

显然我的PHP代码中存在SQL注入错误

include "../admin/site.php"; // Setup db connection.

$appid = -1;
if (is_string($_GET["id"]))
{
    $id = mysql_real_escape_string($_GET["id"]);
    $sql = "select * from version where id=$id";
    $ver = mysql_query($sql);
    if ($id > 0 && $ver && mysql_num_rows($ver))
    {
        $appid = mysql_result($ver, 0, "AppID");
        $app = DLookUp("apps", "name", "id=$appid");
        $name = mysql_result($ver, 0, "Name");
        $notes = mysql_result($ver, 0, "Notes");
    }
    else $app = "No version by that ID";
}
else $app = "No ID";

/* some html snipped */

if (isset($app) && isset($name))
    echo …
Run Code Online (Sandbox Code Playgroud)

php sql-injection

4
推荐指数
1
解决办法
405
查看次数

PHP intval()奇怪的结果

我遇到了一些奇怪的东西,我不知道它为什么会发生!

我有一个像这样的网址:

http://mysite.com/users/USER_ID

这个用户ID可能是INT也可能是STRING,就像Facebook页面地址一样,如果你用页面ID调用它加载它的页面,你也可以用页面名称"my_page_name"来调用它

所以想象一个用户,它的ID是1,它的地址是my_name 在我的php页面上我需要查询db,但在此之前我需要知道要查找哪个列,id或者page_name

所以我带来了这个解决方案:

<?php
    $id = $_GET['id'];
    $id_inted = intval($_GET['id']);

    if($id == $id_inted){
    // The column which I should look into is id
    $column = 'id';
    }else{
    // The column which I should look into is page_name
    $column = 'page_name';
    }

    $query = mysql_qyery(SELECT * FROM members WHERE $column = '$id');
?>
Run Code Online (Sandbox Code Playgroud)

所以我测试了它,但结果很奇怪,即使我调用这个URL:

http://mysite.com/users/page_name

有时候是这样的: $column = 'id';

我打开了一个新的测试页面:

<?php
$real_string = 'abcdefg';
$string_inted …
Run Code Online (Sandbox Code Playgroud)

php

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