相关疑难解决方法(0)

为什么不推荐使用PHP的mysql_函数?

在我不久前停止使用这些功能的时候,玩Devil's Advocate,但这个问题是真实的,可能对很多SO用户很重要.

我们都知道mysql_以错误的方式使用函数可能非常危险,它可能会使您的网站容易受到攻击等,但正确使用这些函数可以防止SQL注入,并且实际上比新的PDO函数一点.

考虑到这一切,为什么这些mysql_功能已被弃用?

php mysql mysqli pdo

20
推荐指数
1
解决办法
9476
查看次数

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

所以我知道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
查看次数

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万
查看次数

清理$ _GET参数以避免XSS和其他攻击

我有一个php的网站,包括()将内容嵌入到模板中.要加载的页面在get参数中给出,我将".php"添加到参数的末尾并包含该页面.我需要做一些安全检查以避免XSS或其他东西(不是mysql注入,因为我们没有数据库).我想出的是以下内容.

$page = $_GET['page'];

if(!strpos(strtolower($page), 'http') || !strpos($page, '/') ||
    !strpos($page, '\\') || !strpos($page, '..')) {
        //append ".php" to $page and include the page
Run Code Online (Sandbox Code Playgroud)

我还能做些什么来进一步消毒我的输入吗?

php sanitization

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

在PHP中,PDO如何防止SQL注入?准备好的陈述如何运作?

我理解通过使用预准备语句来保护数据库免受SQL注入的正确方法.我想了解准备语句如何保护我的数据库.

首先,准备好的语句与"参数化查询"相同吗?

作为一个例子,我粘贴在我的代码下面,以便在用户表中插入新用户.这样安全吗?PDO如何确保其安全?还有什么需要做的,以保护数据库免受注入?

在'Class_DB.php'中:

class DB {
 private $dbHost;
 private $dbName;
 private $dbUser;
 private $dbPassword;   
 function __construct($dbHost, $dbName, $dbUser, $dbPassword) {
  $this->dbHost=$dbHost;
  $this->dbName=$dbName;
  $this->dbUser=$dbUser;
  $this->dbPassword=$dbPassword;
 }
 function createConnexion() {
  return new PDO("mysql:host=$this->dbHost;dbName=$this->dbName", $this->dbUser, $this->dbPassword);
 }
}
Run Code Online (Sandbox Code Playgroud)

在'DAO_User.php'中:

require_once('Class_DB.php');

class DAO_User {
 private $dbInstance;
 function __construct($dbInstance){
  $this->dbInstance=$dbInstance;
 }
 function createUser($user){
  $dbConnection=$this->dbInstance->createConnexion();
  $query=$dbConnection->prepare("INSERT INTO users (userName, hashedPassword, userEmail) VALUES (?,?,?)");
  $query->bindValue(1, $user->userName);
  $query->bindValue(2, $user->hashedPassword);
  $query->bindValue(3, $user->userEmail);
  $query->execute();
 }
}
Run Code Online (Sandbox Code Playgroud)

谢谢,

JDelage

php security pdo

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

我的PDO查询是否可以安全地从SQL注入

我是PDO的新手,想知道我的查询是否可以安全地从SQL注入.如果是这样的话,我会在整个网站上使用这种方法.

    // make connection to DB
$db = new PDO('mysql:host='.$dateBaseHost.';dbname='.$dateBaseName, $dateBaseUsername, $dateBasePassword);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


//simple query and binding with results
$query = $db->prepare(" SELECT * FROM `profile` WHERE `fullname` = :fullname ");

$search = (isset($_GET['search']) === true) ? $_GET['search'] : '' ; // ? : shorthand for if else

// bind parameters - avoids SQL injection
$query->bindValue(':fullname', $search);

//try... if not catch exception
try {
    // run the query
    $query->execute();

    $rows = $query->fetchAll(PDO::FETCH_ASSOC);
    echo '<pre>', print_r($rows, true),'</pre>';
}
catch (PDOException …
Run Code Online (Sandbox Code Playgroud)

php sql pdo sql-injection

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

PHP PDO的预处理语句如何防止SQL注入?使用PDO有哪些其他好处?使用PDO会降低效率吗?

我一直在发现这句话PHP PDO's prepared statements prevents SQL injection.

  • php PDO(PDO准备好的语句)如何阻止sql注入?
  • 使用PDO(PDO准备好的声明)的其他优缺点是什么?
  • 使用PDO(PDO准备好的声明)会降低效率吗?

我已经读过:PDO准备好的语句是否足以阻止SQL注入? 但那里的数据并不完全清楚.

php pdo sql-injection

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

如何将动态构造的ext/mysql查询转换为PDO预处理语句?

我正在将一些使用ext/mysql(mysql_*()函数)的代码转换为PDO和预处理语句.以前当我动态构建查询时,我只是通过我的字符串mysql_real_escape_string()直接将它们放入我的查询中,但现在我发现我需要在执行查询时将值作为数组传递,或者在执行之前绑定变量.

如何将旧代码转换为使用新的数据库驱动程序?

php mysql pdo

9
推荐指数
1
解决办法
1345
查看次数

PDO执行($ input_parameter)保护sql注入为bindParam/bindValue?

是否可以execute($input_parameter)保护sql注入bindParam/bindValue

如果答案是肯定的,那么bindParam()/bindValue()/execute()对任何sql-inject攻击都是无懈可击的吗?或者我需要采取措施来防止此类攻击?

感谢帮助!.

php sql pdo

9
推荐指数
1
解决办法
1467
查看次数

如果我使用MySQLi预处理语句,是否需要转义变量?

如果我使用MySQLi准备好的语句如下:

$stmt = $con1->prepare("UPDATE Login SET Session='LoggedOut' where Session=?");
$stmt->bind_param('s',$Session);
$stmt->execute();
$stmt->close();
Run Code Online (Sandbox Code Playgroud)

我还需要逃避我的变量,例如$Sessionmysqli_real_escape_string();象下面这样:

$Session = mysqli_real_escape_string($con1, $_COOKIE['Session']);
$stmt = $con1->prepare("UPDATE Login SET Session='LoggedOut' where Session=?");
$stmt->bind_param('s',$Session);
$stmt->execute();
$stmt->close();
Run Code Online (Sandbox Code Playgroud)

php mysql mysqli prepared-statement

9
推荐指数
2
解决办法
3669
查看次数