Код (Text): $MODULE = mysql_real_escape_string($MODULE); $ET=get_sql_table('events.id',"(module='$MODULE' or module='*') and (unit='".mysql_real_escape_string($UNIT)."' or unit='*')"); ребят какой метод экранирования верный? так Код (Text): $MODULE = mysql_real_escape_string($MODULE); и в запросе мы пишем Код (Text): module='$MODULE' или так Код (Text): '".mysql_real_escape_string($UNIT)." Добавлено спустя 23 минуты 18 секунд: наверное и так правильно и так, если не ошибасюь
Верно. все еще ошибки исправляете? Ему система досталась от величйшего гуру пхп современности. Это не его случай
smitt да просто в свое время взял cms кривую, она точно досталась от "гуру программиста", она как друшлак, вся в дырках) вот пытаюсь все дырки cms за экранировать))) Добавлено спустя 34 минуты 34 секунды: smitt перешел по ссылки которую вы дали php.net/manual/ru/pdo.prepared-statements.php и увидел интересный момент для чего тут переменная ещё $dbh которая обращается к закрытой переменной $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
В документации по PDO php.net/manual/ru/pdo.connections.php Код (PHP): <?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); ?>
не буду создавать новых тем, спрошу тут как мне за экранировать $clause Код (Text): function get_sql_count($table,$clause='') { if ($clause!='') $clause="where $clause"; $q="select count(*) from $table $clause"; if (!$r=mysql_query($q)) return(0); list($n)=mysql_fetch_row($r); return($n); }
metadon ну это я знаю, ну а как это сделать? так? Код (Text): function get_sql_count($table,$clause='') { if ($clause!='') $clause= mysql_real_escape_string($clause); $q="select count(*) from $table $clause"; if (!$r=mysql_query($q)) return(0); list($n)=mysql_fetch_row($r); return($n); }
Экранируются только переменные. Экранируя всю часть where вы нарвётесь на неприятности. Т.е. экранировать в вашем случае надо при вызове get_sql_count: Код (Text): $с = get_sql_count("article", sprintf("slug='%s'", mysql_real_escape_string($_REQUEST["slug"]))); Что-то в этом роде. sprintf - чтоб не использовать конкатенацию, мне так просто больше нравится
ну я впринципе и так экранирую только переменные, ну просто тут как её за экранировать, надо как то тут Код (Text): $clause="where $clause"; за экранировать $clause Код (Text): function get_sql_count($table,$clause='') { if ($clause!='') $clause="where $clause"; $q="select count(*) from $table $clause"; if (!$r=mysql_query($q)) return(0); list($n)=mysql_fetch_row($r); return($n); } Добавлено спустя 39 минут 57 секунд: получается в функциях уязвимостей нет? и экранировать переменные в самих функциях не стоит?
Блин, ну посмотрите. Экранировать надо значения, подставляемые в запрос. Если вы своё $clause будете экранировать, вы нарушите синтаксис запроса, поскольку код предполагает, что в неё записана часть запроса. Тут речь идёт о конкретной функции, код которой вы показали. Зависит не от переменной, а от того, какую роль играет эта переменная в запросе. Если она содержит инструкции SQL, то её нельзя экранировать - нарушите синтаксис запроса. Если она содержит значение, подставляемое в запрос - необходимо. Вообще, вы берётесь менять кем-то написанный движок, слабо себе представляя, что делаете.
mkramer да вы правы я экранирую в чужом движке, поэтому и тяжело это делается, спасибо за помощь щас ещё в инете почитаю