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

Форум PHP

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

 

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

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

тема: Фильтрация GET масива и проверка
 
 автор: Ванек2010   (02.11.2010 в 16:06)   письмо автору
 
 

Была у меня такая вещица

<?php
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); 


Но скажите почему шелл смогли залить? используя вот эту фигню
сайт/?GET=module&m='; USE Master exec xp_cmdshell 'echo "<?php код шелла ?>" > C:\xampp\htdocs\config1.php;--
Как отфильтровать GET еще можно?
И что скажите на счет этого скрипта
<!-- sql.php -->
<?
$get_ar 
array_values($_GET);
$c_a_g count($get_ar);
for (
$i 0;$i $c_a_g;$i++){
if(
eregi('union(.*)select',$get_ar[$i])){ header("Location: http://site.com"); exit; }
if(
eregi('order(.*)by',$get_ar[$i])){ header("Location: http://site.com"); exit; }
}
$post_ar array_values($_POST);
$c_a_p count($post_ar);
for (
$i 0;$i $c_a_p;$i++){
if(
eregi('union(.*)select',$post_ar[$i])){ header("Location: http://site.com"); exit; }
if(
eregi('order(.*)by',$post_ar[$i])){ header("Location: http://site.com"); exit; }
}
?>

  Ответить  
 
 автор: Красная_шляпа   (02.11.2010 в 16:25)   письмо автору
 
   для: Ванек2010   (02.11.2010 в 16:06)
 

числа $int = @(intval) $_GET["int"]
строки используемые в sql запросах mysql_real_escape_string($_GET["data"]);
подключаемы модули проверка на существование file_exists

  Ответить  
 
 автор: sim5   (02.11.2010 в 16:26)   письмо автору
 
   для: Красная_шляпа   (02.11.2010 в 16:25)
 

А собака зачем?

  Ответить  
 
 автор: Ванек2010   (02.11.2010 в 17:19)   письмо автору
 
   для: Ванек2010   (02.11.2010 в 16:06)
 

Написал скрипт именно для гета.
Что скажите и укажите на ошибки если не трудно


<?php 
$badchars 
= array(";","ggg","'","*","/"," \ ","DROP""SELECT""UPDATE""DELETE""WHERE","USE"
"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(
$badchars as $val) {

$arr_exists array_key_exists($val,$_GET);
$arr_keys array_search($val,$_GET);
if (
$arr_exists == true or $arr_keys == true
  { 
      exit(
"Подозрение на SQL инъекцию");
  }
}

  Ответить  
 
 автор: sim5   (02.11.2010 в 17:36)   письмо автору
 
   для: Ванек2010   (02.11.2010 в 17:19)
 

Есть функции пересечения массивов, кторые могут за раз вернуть вам массив, имеющий указанные значения, и не потребуется поиски и проверка ключей.

PS. Не буду ждать вашей реакции, спрошу сразу: а как вы собираетесь найти значение, например, SELECT в вашем массиве, которое бы было в GET массиве? Ведь вам, если уж подставят, никак не напишут ключ=SELECT, а подцепят к вашему параметру, и уже, например, SELECT *, никак не будет равно значению SELECT из вашего массива. То есть, ваши поиски в массиве бесплодны.

  Ответить  
 
 автор: Ванек2010   (02.11.2010 в 18:42)   письмо автору
 
   для: sim5   (02.11.2010 в 17:36)
 

Да вот доделал
<?php
foreach($badchars as $val) {
$key_gets array_keys($_GET); 
$i=0
while(
$i<count($key_gets)) { 
    
$substr substr_count($_GET[$key_gets[$i]],$val);
    
$error $substr++;
    if(
$error >0) { exit("Подозрение на атаку"); }
    
$i++; 


$arr_exists array_key_exists($val,$_GET);

if (
$arr_exists == true
  { 
      exit(
"Подозрение на атаку");
  }
}

  Ответить  
 
 автор: sl1p   (02.11.2010 в 19:08)   письмо автору
 
   для: Ванек2010   (02.11.2010 в 18:42)
 

чтото вы через жопу както делаете..
где эти данные потом используются? Я уверен тут можно прямо всё сделать.

  Ответить  
 
 автор: sim5   (02.11.2010 в 19:35)   письмо автору
 
   для: Ванек2010   (02.11.2010 в 18:42)
 

<?
$a 
= array('aa','bb','cc','dd','ee');
$_GET = array('a'=>'aa''b'=>'bbb''c'=>'dd');
$_GET str_word_count(implode(" ",  $_GET),1);
echo 
array_intersect($_GET$a) ? "Attention!" "Sleep";
Это как пример использования стандартных функций, позволяющих упростить решение задач. И я вам уже упоминал о них выше, но....
Пример потому, что функция str_word_count() считает словами последовательности алфавитных символов, возможно, включающие, но не начинающихся с "'" и "-". Набор символов, считающихся алфавитными, зависит от текущей локали. То есть, она может не возвращать 1, 2, 3...
Подумайте сами как это можно устранить, используя другие стандартные функции. Какой смысл писать циклы, если РНР предоставляет готовые инструменты?

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

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