HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > PHP
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #23  
Старый 27.10.2008, 00:26
Doom123
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме:
3941248

Репутация: 668


Отправить сообщение для Doom123 с помощью ICQ
По умолчанию

хотите защиту он от скуль ????

http://il.php.net/manual/ru/function.mysql-real-escape-string.php

рименение mysql_real_escape_string() к каждой переменной, вставляемой в запрос, предотвращает SQL Injection. Нижеследующий код является наилучшим вариантом составления запросов и не зависит от установки Magic Quotes.

Запрос, составленный таким образом, будет выполнен без ошибок, и взлом с помощью SQL Injection окажется невозможен.


PHP код:
<?php
// Функция экранирования переменных
function quote_smart($value)
{
    
// если magic_quotes_gpc включена - используем stripslashes
    
if (get_magic_quotes_gpc()) {
        
$value stripslashes($value);
    }
    
// Если переменная - число, то экранировать её не нужно
    // если нет - то окружем её кавычками, и экранируем
    
if (!is_numeric($value)) {
        
$value "'" mysql_real_escape_string($value) . "'";
    }
    return 
$value;
}

// Соединяемся
$link mysql_connect('mysql_host''mysql_user''mysql_password')
    OR die(
mysql_error());

// Составляем безопасный запрос
$query sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
            
quote_smart($_POST['username']),
            
quote_smart($_POST['password']));

mysql_query($query);
?>
А также класс от меня

PHP код:
<?php

/**
 * @author @FATAL@
 * @copyright 2008
 */

class DB
{
    public function 
__construct($host$user$db_pass$db)
    {
        
$this->host $host;
        
$this->user $user;
        
$this->db_pass $db_pass;
        
$this->db $db;
    }

    public function 
conn()
    {
        if(!(
$this->connect = @mysql_connect($this->host$this->user$this->db_pass)))
        {
            
$this->false 'Connection Error';
            return 
false;
        }
        
        return (!@
mysql_select_db($this->db,$this->connect))? false true;
    }

    public function 
mysql_qw()
    {
        
$this->args func_get_args();
        
$qwery $this->mysql_make_qw();
        return 
$result mysql_query($qwery,$this->connect);
        
mysql_free_result($result);
    }
    
    private function 
mysql_make_qw()
    {
        
$tml $this->args;
        
$tml[0] = str_replace('%''%%'$tml[0]);
        
$tml[0] = str_replace('?''%s'$tml[0]);
        foreach (
$tml as $i => $v)
        {
            if (!
$i)
             continue;
            if (
is_int($v))
             continue;
                
            if (
get_magic_quotes_gpc())
                
$v stripslashes($v);
    
            
$tml[$i] = "'" mysql_real_escape_string($v,$this->connect) . "'";
        }
        for (
$i $c count($tml) - 1$i $c 20$i++)
        {
            
$tml[$i 1] = "UNKNOWN_PLACEHOLDER_$i";
            return 
call_user_func_array("sprintf"$tml);
        }
    }
    
    public function 
mysql_fetch($result)
    {
        return 
mysql_fetch_assoc($result);
    }
    
    public function 
error()
    {
        return (@
mysql_error($this->connect))? mysql_error($this->connect): $this->false;
    }

    public function 
__destruct()
    {
        @
mysql_close($this->connect);
    }
}
?>

Последний раз редактировалось Doom123; 27.10.2008 в 00:28..
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ