Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Фильтр $_GET
 
 автор: Ванек2010   (30.07.2010 в 10:18)   письмо автору
 
 

Допустим есть массив с запрещенными словами и символами
<?php
    $badchars 
= array(";","'","*","/"," \ ","DROP""SELECT""UPDATE""DELETE""WHERE""drop""select""update""delete""where""-1""-2""-3","-4""-5""-6""-7""-8""-9""distinct""having""truncate""replace""handler""like""procedure""limit""order by""group by"); 

Как можно создать проверку GET'a через этот массив?

  Ответить  
 
 автор: psychomc   (30.07.2010 в 10:52)   письмо автору
 
   для: Ванек2010   (30.07.2010 в 10:18)
 


<?php
if (in_array($_GET["char"], $badchars)) {
   echo 
"это запрещенное слово/символ";
} else {
  echo 
"это НЕ запрещенное слово/символ";
}

  Ответить  
 
 автор: Ванек2010   (30.07.2010 в 10:57)   письмо автору
 
   для: psychomc   (30.07.2010 в 10:52)
 

Это на определенную переменную, нельзя сделать так, чтобы он всегда искал запрещенные символы
<?php
if (in_array($_GET["чтобы сюда проходили каждые переменные по гету"], $badchars)) {
   echo 
"это запрещенное слово/символ";
} else {
  echo 
"это НЕ запрещенное слово/символ";

  Ответить  
 
 автор: neadekvat   (30.07.2010 в 11:00)   письмо автору
 
   для: Ванек2010   (30.07.2010 в 10:18)
 

Через array_map, только непонятно, зачем это все?

  Ответить  
 
 автор: Ванек2010   (30.07.2010 в 11:08)   письмо автору
 
   для: neadekvat   (30.07.2010 в 11:00)
 

Дополнительная проверка на символы, от sql инъекций

  Ответить  
 
 автор: neadekvat   (30.07.2010 в 11:14)   письмо автору
 
   для: Ванек2010   (30.07.2010 в 11:08)
 

Так может стоит сосредоточится на самих узких местах: запросы, подключения файлов и т.д.?

  Ответить  
 
 автор: Ванек2010   (30.07.2010 в 11:23)   письмо автору
 
   для: neadekvat   (30.07.2010 в 11:14)
 

Помойму так проще, проверил GET один раз и все, не надо в каждом подключении, что-то проверять

  Ответить  
 
 автор: neadekvat   (30.07.2010 в 11:34)   письмо автору
 
   для: Ванек2010   (30.07.2010 в 11:23)
 

Ну делайте, делайте..

  Ответить  
 
 автор: psychomc   (30.07.2010 в 11:54)   письмо автору
 
   для: Ванек2010   (30.07.2010 в 11:23)
 

м-да...

может тогда проще уже прогнать весь $_GET через mysql_real_escape_string или (int) / intval
в зависимости от ожидаемого значения?

  Ответить  
 
 автор: Ванек2010   (30.07.2010 в 12:08)   письмо автору
 
   для: psychomc   (30.07.2010 в 11:54)
 

Да дело в том, что база не MySql, а MSSQL, эти функции не помогут
Хотя (int) должен помочь) хм

  Ответить  
 
 автор: neadekvat   (30.07.2010 в 12:35)   письмо автору
 
   для: Ванек2010   (30.07.2010 в 12:08)
 

Почему не помогут?

  Ответить  
 
 автор: psychomc   (30.07.2010 в 13:31)   письмо автору
 
   для: Ванек2010   (30.07.2010 в 12:08)
 

а разве синтаксис запросов отличается?

  Ответить  
 
 автор: bishake   (30.07.2010 в 12:10)   письмо автору
 
   для: Ванек2010   (30.07.2010 в 10:18)
 

Вы занимаетесь фигнёй.
Почитайте

  Ответить  
 
 автор: Ванек2010   (30.07.2010 в 13:09)   письмо автору
 
   для: bishake   (30.07.2010 в 12:10)
 

Хорошая статья спасибо, но почти все мне это было известно уже, у меня и так поля все прег матчем заделаны. Я бы хотел помощи, помогите разобраться с этой функцией, как она работает?
<?PHP
function check_inject() 
  { 
    
$badchars = array(";","'","*","/"," \ ","DROP""SELECT""UPDATE""DELETE""WHERE""drop""select""update""delete""where""-1""-2""-3","-4""-5""-6""-7""-8""-9""distinct""having""truncate""replace""handler""like""procedure""limit""order by""group by"); 
   
    foreach(
$_POST as $value
    { 
    
$value clean_variable($value);

    if(
in_array($value$badchars)) 
      { 
        die(
"<b><font color=red>SQL Injection Detected - Make sure only to use letters and numbers!</font>\n<br>\nIP: ".$_SERVER['REMOTE_ADDR']."</b>"); 
      } 
      else 
      { 
        
$check preg_split("//"$value, -1PREG_SPLIT_OFFSET_CAPTURE); 
        foreach(
$check as $char
        { 
          if(
in_array($char$badchars)) 
          { 
            die(
"<b><font color=red>SQL Injection Detected - Make sure only to use letters and numbers!</font>\n<br>\nIP: ".$_SERVER['REMOTE_ADDR']."</b>"); 
          } 
        } 
      } 
    } 
  }
function 
clean_variable($var) { 
    
$newvar preg_replace('/[^a-zA-Z0-9\_\-]/'''$var); 
    return 
$newvar
}
check_inject();






// Clean Var Edited 

function clean_var($var) {
$var stripslashes($var);
$rules '/[^a-zA-Z0-9-\_\=\@\.\,\:\/\^\+\!\~\[\]\*\{\}\(\)\|\\\ ]/';
if(@
preg_match($rules,$var) || $var==NULL) { } //If isset ErroR
$newvar = @preg_replace($rules,'',$var);
$newvar str_replace(" ","",$newvar);
$newvar str_replace("\n","",$newvar);
$newvar str_replace("\0","",$newvar);
$newvar str_replace("'","&apos;",$newvar);
return 
$newvar;
}






// Onter Anti-SQL Injection 

function xw_sanitycheck($str){ 
    if(
strpos(str_replace("''","","$str"),"'")!=false)
        return 
str_replace("'""''",$str); 
    else 
        return 
$str


function 
secure($str){ 
    
// Case of an array 
    
if (is_array($str)) { 
        foreach(
$str AS $id => $value) { 
            
$str[$id] = secure($value); 
        } 
    } 
    else 
        
$str xw_sanitycheck($str); 

    return 
$str


// Get Filter 
$xweb_AI    array_keys($_GET); 
$i=0
while(
$i<count($xweb_AI)) { 
    
$_GET[$xweb_AI[$i]]=secure($_GET[$xweb_AI[$i]]); 
    
$i++; 

unset(
$xweb_AI); 

// Request Filter 
$xweb_AI    array_keys($_REQUEST); 
$i=0
while(
$i<count($xweb_AI)) { 
    
$_REQUEST[$xweb_AI[$i]]=secure($_REQUEST[$xweb_AI[$i]]); 
    
$i++; 

unset(
$xweb_AI); 

// Post Filter 
$xweb_AI    array_keys($_POST); 
$i=0
while(
$i<count($xweb_AI)) { 
    
$_POST[$xweb_AI[$i]]=secure($_POST[$xweb_AI[$i]]); 
    
$i++; 


// Cookie Filter (do we have a login system?) 
$xweb_AI    array_keys($_COOKIE); 
$i=0
while(
$i<count($xweb_AI)) { 
    
$_COOKIE[$xweb_AI[$i]]=secure($_COOKIE[$xweb_AI[$i]]); 
    
$i++; 

// End 
?>

  Ответить  
 
 автор: neadekvat   (30.07.2010 в 13:22)   письмо автору
 
   для: Ванек2010   (30.07.2010 в 13:09)
 

Да хер его знает, как она работает! Потому что невозможно даже увидеть ее. Сколько раз просили - используйте переносы строк для длинных кусков. Что теперь с этим скроллингом делать?

  Ответить  
 
 автор: Drago   (30.07.2010 в 13:46)   письмо автору
 
   для: neadekvat   (30.07.2010 в 13:22)
 

В Опере есть хорошая штука "Подогнать по ширине" называется. Нажал кнопочку и весь контент виден в пределах экрана.

Но это так, мысли в слух. :)

  Ответить  
 
 автор: neadekvat   (30.07.2010 в 14:00)   письмо автору
 
   для: Drago   (30.07.2010 в 13:46)
 

Да ладно, есть такая вещь хорошая - широкоформатные мониторы
Но это не отменяет необходимости укорачивать строки

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования