小编Rya*_*elt的帖子

SQL注入保护

我以为我会对我认为基本上消除SQL注入的可能性的选项有所了解(我认为).

目前,我有我的管理员帐户,这显然让我完全掌握了数据库(更改,删除等).我有一个PHP使用的帐户只能访问SELECT,UPDATE,DELETE,INSERT.如何为每个操作设置一个用户,然后只是在mysql_query语句中引用连接ID - 现在显然这会给服务器带来更大的压力,基本上必须进行4个连接,但是如果它的安全性是重要的是,在我看来,这将是一个有效的选项,通过将命令限制为您想要在这种情况下执行的EXACT函数.有关此选项可行性的任何想法?

更新:正如我之前没有提到的那样,这不会是阻止SQL注入,mysql_real_escape_string(),预备语句等的唯一障碍.但我只是想,如果有些人如何,所有这些都失败了,不会这样至少限制他们可以做的伤害?(例如,在注册表上,他们将无法选择哈希值或DELETE条目).

php mysql sql sql-injection

6
推荐指数
1
解决办法
903
查看次数

PHP OOP和PDO

我第一次尝试广泛使用PHP OOP和PDO.我终于让脚本工作,但正如你注意到的那样,我必须将PDO连接移动到登录功能 - 最初它只是在__construct().我不想打开一个新的PDO连接,这很草率.如何在整个班级中保持相同的连接?

 <?php
class user{

public $id;
public $name;
public $email;
private $password;

public function __construct() {
    $DBH = new PDO("mysql:host=HOST;dbname=DB", "USER", "PASS");  
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

public function login($email,$password,$type){

    $DBH = new PDO("mysql:host=HOST;dbname=DB", "USER", "PASS");  
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $password_hash = sha1($password);
    try{
        if ($type != "actives") {
            throw new Exception("Type Handling Error");
        }
        $STH = $DBH->query("SELECT id, email, password FROM $type WHERE email='$email' AND password='$password_hash'");
        $STH->setFetchMode(PDO::FETCH_ASSOC);  
        $row_count = $STH->rowCount();  
        $row = $STH->fetch();

        if($row_count == 1){
            session_start();
            session_regenerate_id(); …
Run Code Online (Sandbox Code Playgroud)

php oop

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

标签 统计

php ×2

mysql ×1

oop ×1

sql ×1

sql-injection ×1