Сценарий обработки ввода / вывода PHP и Ajax - PullRequest
2 голосов
/ 01 июля 2011

Я все еще новичок в обработке строк в PHP. Ниже приведена схема того, что я сейчас делаю. В конечном счете, я хотел бы получить общую методологию для обработки строк в следующих сценариях. Обратите внимание, что в этом сценарии в тексте много математических символов и синтаксиса.

Строки и целые числа вводятся через стандартную форму на основе HTML (я забыл упомянуть об этом на диаграмме).

Шаг А в настоящее время использует: mysql_real_escape_string(input);

Шаг B в настоящее время использует:

  • htmlentities($string2)
  • ничего для $string1
  • ничего для целого числа

Вопросы:

  1. Что касается внедрения MySQL, достаточно ли mysql_real_escape_string, чтобы защититься от этого?
  2. Мне все еще нужно закончить обработку вывода для String1. Обратите внимание, как текст на самом деле используется в двух разных местах: HTML и Canvas. htmlentities на шаге B заставит синтаксис кода правильно отображаться на холсте HTML5, но не в HTML. И наоборот, за то, что он пропущен (HTML-синтаксис разбивает страницу). Есть ли функция JavaScript, идентичная htmlentities PHP?
  3. int форма должна быть проверена, чтобы убедиться, что это int.
  4. String2 выводит «null» в HTML, когда я использую этот символ ('-'), который является , а не стандартным символом минуса ('-').
  5. Магические кавычки отключены. Однако, если я запускаю сценарий на сервере с включенным им, мне нужен короткий сценарий: IF (магические кавычки включены) {отключить магические кавычки}.
  6. Что я забыл в отношении проверки формы?

Если мой подход совершенно неправильный, поправьте меня и помогите мне раз и навсегда разобраться в этом. Вы можете описать свое решение в терминах A, B, C, D и E, если считаете, что это полезно. Заранее спасибо.

String Processing Diagram

Ответы [ 3 ]

1 голос
/ 01 июля 2011
  1. mysql_real_escape_string() будет правильно экранировать ваш код
  2. (A) В конце JavaScript метод jQuery .text() будет корректно экранировать код перед его выводом на страницу.(B) Проверьте PHP.js.Это библиотека JavaScript, которая воспроизводит функции PHP и включает в себя htmlentities() и htmlspecialchars().http://phpjs.org/
  3. Что касается целого числа, вы можете использовать функцию ctype_digits(), чтобы убедиться, что это числовое значение;и вы также можете использовать некоторую форму подсказок типа: $int = (int) $int;.
  4. Я согласен с джентльменом, который рекомендовал попробовать htmlspecialchars().
  5. Старайтесь не использовать магические цитаты.Это ужасная особенность, и она будет удалена в будущем выпуске PHP.Если вам нужно включить защиту от магических кавычек, попробуйте что-то похожее на код ниже. (см. Внизу поста)
  6. Трудно сказать, не видя свой код, но кажется, что вы на правильном пути.

-

if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
    $func = function(&$val, $key) {
        if (!is_numeric($val)) {
            $val = stripslashes($val);
        }
    };

    array_walk_recursive($_GET, $func);
    array_walk_recursive($_POST, $func);
    array_walk_recursive($_COOKIE, $func);

    unset($func);
}
0 голосов
/ 01 июля 2011

1) Не уверен, что этого достаточно, но вы также можете попробовать использовать подготовленные операторы (PDO) , что гарантирует полную защиту от SQL-инъекций + небольшое повышение производительности, если вы используете несколько заданий более одного раза в одном и том же сценарий.

3) просто приведите к int - (int) $ string

5) Вау, это должны быть архаичные серверы ..

Я думаю, что вы слишком сильно реагируете на безопасность. Если вы действительно нуждаетесь в защите, используйте подготовленные операторы при обращении к базе данных и используйте какой-нибудь HTML-очиститель (например: http://htmlpurifier.org/) для очистки вывода html (предотвращая XSS)

0 голосов
/ 01 июля 2011
  1. Да
  2. -
  3. -
  4. Используйте htmlspecialchars, htmlentities не обязательно. Вы получаете NULL, потому что у вас, вероятно, проблема с кодировкой.
  5. Если вы видите, что магические кавычки включены, уже слишком поздно, и вам нужно вручную отменить цитату.

Я так и не понял, что хочу сделать.

...