Волшебные кавычки в PHP

Самый быстрый и простой способ, с помощью которого я смог найти отличную игру Вью и Электрона, - это электронный строитель .

Чтобы использовать, настройте проект с Vue CLI3, используя

vue create my-project

, затем CD в этот каталог, в данном случае «my-project», и запустите

[ 119] vue add electron-builder

Это устанавливает базовые леса, которые позволяют Vue и электрону играть хорошо с самого начала. Вы можете проверить свою работу, запустив не построенную тестовую версию, используя

npm run electron:serve

и, когда вы будете готовы к развертыванию, можете использовать

npm run electron:build

строить. Это значительно упрощает процесс, который можно увидеть в других местах, когда вы работаете с гигантским, а не спроектированным шаблоном или пытаетесь записать относительный путь, чтобы ваши сборки и среды разработки работали одинаково.

17
задан VirtuosiMedia 21 October 2008 в 01:29
поделиться

11 ответов

Волшебные кавычки по сути повреждаются. Они были предназначены для очистки входа к Сценарию PHP, но не зная, как тот вход будет использоваться, невозможно санировать правильно. В любом случае Вы - более обеспеченная проверка, если волшебные кавычки включены, то вызов stripslashes () на $ _GET/$ _POST/$ _COOKIES/$ _REQUEST, и затем очистка переменных в точке, где Вы используете его где-нибудь. Например, urlencode (), если Вы используете его в URL, htmlentities (), если Вы печатаете его назад к веб-странице или используете Вашу функцию выхода драйвера базы данных при хранении его к базе данных. Обратите внимание, что те входные массивы могли содержать подмассивы, таким образом, Вы, возможно, должны были бы записать, что функция может рекурсивно вызвать в подмассивы для разделения тех наклонных черт также.

страница справочника PHP на волшебных кавычках соглашается:

"Эта функция была УДЕРЖАНА ОТ ИСПОЛЬЗОВАНИЯ с PHP 5.3.0 и УДАЛЕНА с PHP 5.4.0. Доверию этой функции высоко препятствуют. Волшебные Кавычки являются процессом, который автоволшебно выходит из входящих данных к Сценарию PHP. Это предпочтено, чтобы кодировать с волшебными кавычками прочь и вместо этого выйти из данных во времени выполнения по мере необходимости".

25
ответ дан 30 November 2019 в 10:31
поделиться

Волшебные кавычки были ошибкой дизайна. Их использование является несовместимым с сохранением Вашей исправности.

я предпочитаю:

if (get_magic_quotes_gpc()) {
   throw new Exception("Turn magic quotes off now!");
}

не пишут код для совместимости с по сути поврежденными установками. Вместо этого защитите aginst их использование при наличии Вашего кода FAST СБОЯ.

17
ответ дан 30 November 2019 в 10:31
поделиться

Я использую следующий код в заголовочном файле моего веб-сайта для инвертирования эффектов magic_quotes:

<?php

// Strips slashes recursively only up to 3 levels to prevent attackers from
// causing a stack overflow error.
function stripslashes_array(&$array, $iterations=0) {
    if ($iterations < 3) {
        foreach ($array as $key => $value) {
            if (is_array($value)) {
                stripslashes_array($array[$key], $iterations + 1);
            } else {
                $array[$key] = stripslashes($array[$key]);
            }
        }
    }
}

if (get_magic_quotes_gpc()) {
    stripslashes_array($_GET);
    stripslashes_array($_POST);
    stripslashes_array($_COOKIE);
}

?>

Затем я могу записать остальную часть моего кода, как будто magic_quotes никогда не существовал.

6
ответ дан 30 November 2019 в 10:31
поделиться

"Я предпочел бы не должным быть полагаться на определенную для базы данных функцию выхода как mysql_real_escape_string ()"

Тогда использование что-то как PDO. Но необходимо инвертировать ущерб, нанесенный волшебными кавычками так или иначе.

2
ответ дан 30 November 2019 в 10:31
поделиться

Поместите требование PHP 5.2 или выше на Вашем коде и используйте фильтр API. filter_* функции получают доступ к необработанным входным данным непосредственно (они никогда не затрагивают $_POST и т.д.), таким образом, они абсолютно незатронуты magic_quotes_gpc.

Затем этот пример:

if (!get_magic_quotes_gpc()) {
    $lastname = addslashes($_POST['lastname']);
} else {
    $lastname = $_POST['lastname'];
}

Может стать этим:

$lastname = filter_input(INPUT_POST, 'lastname');
2
ответ дан 30 November 2019 в 10:31
поделиться

Право, это не лучший способ сделать это и не самое безопасное. Выход лучше всего сделан относительно того, для чего Вы выходите. Если это должно сохранить в mysql базе данных, используйте mysql_real_escape_string, который принимает во внимание другие локали, наборы символов. Для HTML, htmlentities. Для использования в коде, escapeshellcmd, escapeshellarg. Да, Вам, вероятно, нужно к stirpslashes сначала, если волшебные кавычки идут. Но лучше всего не рассчитывать на него или использовать его.

1
ответ дан 30 November 2019 в 10:31
поделиться

Относительно использования базы данных определенная функция выхода Вы в значительной степени должны. Я нашел, что просто использование addslashes() перестало работать в редких случаях с MySQL. Можно записать функцию для выхода, который определяет, какой DB Вы используете и затем используете функцию Escape approriate.

0
ответ дан 30 November 2019 в 10:31
поделиться

Можно попробовать это:

if (get_magic_quotes_gpc()) { 
          $_REQUEST = array_map('stripslashes', $_REQUEST); 
          $_GET = array_map('stripslashes', $_GET);
          $_POST = array_map('stripslashes', $_POST);
          $_GET = array_map('stripslashes', $_COOKIES);

    }
0
ответ дан 30 November 2019 в 10:31
поделиться

"Я предпочел бы не должным быть полагаться на определенную для базы данных функцию выхода как mysql_real_escape_string ()"

Также addslashes, может быть обманут, также проверяют это сообщение:

http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string

0
ответ дан 30 November 2019 в 10:31
поделиться

Ваш пример кода назад, необходимо делать следующее:

if (get_magic_quotes_gpc()) {
  $lastname = stripslashes($_POST['lastname']);
} else {
  $lastname = $_POST['lastname'];
}

Обратите внимание, что это оставляет Ваши входные данные в 'необработанном' состоянии точно, поскольку пользователь ввел их - никакие дополнительные обратные косые черты и потенциально загрузился с Внедрением SQL и нападениями на XSRF - и это точно, что Вы хотите. Затем Вы удостоверяетесь, что всегда используете одно из следующего:

  • Когда echoлуг переменная в HTML, перенесите его в htmlentities()
  • При помещении его в mysql используйте подготовленные операторы или иначе mysql_real_escape_string() как минимум.
  • Когда echoлуг переменная в код Javascritpt, использовать json_encode()

У Joel Spolsky есть некоторый хороший стартовый совет в Создании Взгляда Неверного кода Неправильно

0
ответ дан 30 November 2019 в 10:31
поделиться

Только что нашел это на страницах руководства PHP , похоже, довольно умный способ убрать их (имеет дело с ключами и значениями. ..):

if (get_magic_quotes_gpc())
{
    $_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
    $_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
    $_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
    $_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
    ini_set('magic_quotes_gpc', 0);
}
0
ответ дан 30 November 2019 в 10:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: