Дырка на значок '

Тема в разделе "PHP", создана пользователем Ќacnєp, 20 фев 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Ќacnєp

    Ќacnєp Постоялец

    Регистр.:
    14 окт 2006
    Сообщения:
    92
    Симпатии:
    21
    Люди у меня в скрипте при вводе знака ' выдает ошибку
    mysql_num_rows(:( supplied argument is not a valid MySQL result resource in
    /www/httpdocs/
    причем такое везде и в поиске и в ответе, как исправить кто знает
     
  2. ajrengen

    ajrengen Постоялец

    Регистр.:
    28 сен 2008
    Сообщения:
    110
    Симпатии:
    29
    везде при проверке GET данных обрабатывать через функцию addslashes();
     
  3. Ќacnєp

    Ќacnєp Постоялец

    Регистр.:
    14 окт 2006
    Сообщения:
    92
    Симпатии:
    21
    напиши подробней а то я в РНР не батя
     
  4. upandhigh

    upandhigh

    Регистр.:
    11 фев 2009
    Сообщения:
    235
    Симпатии:
    89
    открой файл на который ссылается ошибка, там указан номер строки и имя файла. чуть выше этой строки должна быть mysql_query строка и в ней в текст вставляются переменные. так вот эти переменные нада заключить в функции mysql_escape_string()

    но вобще это нада все скрипты просмотреть и экранировать все в них.

    как вариант можешь в хтаксес добавить такую строку

    php_flag magic_quotes_gpc on

    это не очень хорошо, но если твой сайт будет работать - то на какоето вермя поможет. и если поможет то добавь вторую строку. в хтакссес

    display_errors = Off

    ты запретишь вывод ошибок на сайте. сложнее будет похакать тебя :)
     
    Ќacnєp нравится это.
  5. ajrengen

    ajrengen Постоялец

    Регистр.:
    28 сен 2008
    Сообщения:
    110
    Симпатии:
    29
    На, вот тут подробно всё описано

    http://ru.wikipedia.org/wiki/Внедрение_SQL-кода

    лечится многими способами
    вот два самых простых:

    Первый
    $HTTP_GET_VARS[id]=addslashes($HTTP_GET_VARS[id]); //добавляем в переменную слеши
    $new=mysql_query("Select * from `dle_post` where id='$HTTP_GET_VARS[id]' limit 1;"); //даём запрос в мускул.

    Второй:
    $query="Select * from `dle_post` where id='$HTTP_GET_VARS[id]' limit 1;"; // создаём строку запроса
    $query=mysql_escape_string($query);
    либо так:
    $query=addslashes($query);

    $new=mysql_query($query); // Даём запрос в мускул


    PS ' это не значок, а символ одинарных кавычек
     
    Ќacnєp нравится это.
  6. kud

    kud Постоялец

    Регистр.:
    18 фев 2009
    Сообщения:
    89
    Симпатии:
    11
    А почему это не очень хорошо?
    Я всегда в настройках php включал magic_quotes_gpc .. Ничего плохого не замечал ...
     
  7. upandhigh

    upandhigh

    Регистр.:
    11 фев 2009
    Сообщения:
    235
    Симпатии:
    89
    проблем очень много + они не всегда спасают. часто можно было передать в различных кодировках и прочих хаках ' и все прходило на ура. потом не все переменные экранировались, далеко не всегда он правильно экранировал, вобщем по заверению авторов все это приводило к неоднозначности и раслабляла пышных программеров, из за этого по просторам инета образовалось куча дырявого софта. на сколько я знаю в версии 5.3 и 6 его уже не будет. всю проверку входящих переменных должны делать сами кодеры.
     
  8. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    HTTP_GET_VARS ---Позавчерашний день PHP...:)
    С Вашим кодом столько дыр понаделаете ,что ваш сайт поимеют по самое нехочу...:eek:...

    Ќacnєp...Сначала обработайте грёбаные магические кавычки...
    PHP:
    if ((get_magic_quotes_gpc()==)&& !function_exists('s_slash'))
    {
      function 
    s_slash($v)
      {
        if (
    is_array($v)) return array_map('s_slash'$v);
        return 
    stripslashes($v);
      }
            if (!empty(
    $_GET))     $_GET     s_slash($_GET);
            if (!empty(
    $_POST))    $_POST    s_slash($_POST);
            if (!empty(
    $_COOKIE))  $_COOKIE  s_slash($_COOKIE);
            if (!empty(
    $_SESSION)) $_SESSION s_slash($_SESSION);
    }
    затем обработайте входные переменные ..
    если число...
    PHP:
    $id = isset($_GET['id']) ? intval($_GET['id']) : '';
    если не число..
    PHP:
    $name  = isset($_GET['name']) ? htmlspecialchars($_GET['name']) : '';
    либо htmlentities($_GET['name'])...
    затем при внесении или выборке...в БД..обработайте данные mysql_real_escape_string()
    PHP:
    $rs=mysql_query("SELECT `name`
     FROM `table` 
     WERE `id` = '"
    .mysql_real_escape_string($id)."' ",$db);
    И будет Вам счастье.....
     
    Ќacnєp нравится это.
  9. 1d37r

    1d37r Читатель

    Заблокирован
    Регистр.:
    16 сен 2007
    Сообщения:
    288
    Симпатии:
    48
    как вариант проще немного проще будет сделать так:

    $переменная = preg_replace("/'/", "&apos", $переменная);
     
  10. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    Проще для кого и для чего???
     
Статус темы:
Закрыта.