Добро пожаловать, Гость!
полезно - Страница 0
PHP/MYSQL: Уроки | полезно
bobrik
:
не копипаст, сам пишу, кому не нрав или что, давайте до свидание.
Не давно написали в почту о том как защитить свой сайт, например если вы создаете сайт и там пользователи могут прописывать php код который выполняется у вас на стороне и доступа к php.ini хост запретил (такое бывает и не мало)
здесь вам надо запретить: shell_exec, popen, unlink и т.д.
тут многие используют подмену, например
'unlink' => 'error'
но поверьте это не вариант, не раз видел сайты с такой защитой и без проблем их ломал.
'u'.'n'.'link' например просто написать в таком варианте или через массивы буквы вснутуть, подмена вам не поможет, вариатсий слишком много для этого.
Но что делать?
если доступа к php.ini нет и вы не можете дать права файлу лишь на свою дирикторию, то.
Я в помощь одному человеку который уш очень долго просил написал сл вариант защиты
сначала принимаем исходный код через пост, переобразуем все в одну строку, убираем абзацы и пробелы и не нужные символы и ищем на поиск, если запрещенных символов нет, берем исходник и успешно его выполняем.
все прописывать очень долго, поэтому кину код
данный метод найдет например base в любых вариациях
'b''''''''''''''a'''''''''''==============s-------e
b
a
s
e
b1213a123123s123312e
защита на 90% ибо ascii не учитывается, хотя мало кто додумается использовать Ascii
вот и код
$code = $_POST['code'];
if ($code == "") {
echo "
<! DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<html lang="ru">
<title> запрещенный символ </title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="head">
<strong>Вы не заполнили все поля</strong>
</div>
<META HTTP-EQUIV='Refresh' content ='3; URL=http://code-on.ru'>
</body>
</html>
";
}
elseif ($posphpopen == false and $posphpclose == false) {
echo "
<! DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<html lang="ru">
<title> запрещенный символ </title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="head">
<strong>Вы не открыли php "
<?" или не закрыли "?>" проверьте ваш код</strong>
</div>
<META HTTP-EQUIV='Refresh' content ='3; URL=http://code-on.ru'>
</body>
</html>
";
};
$codephp2 = array (
'1' => '',
'2' => '',
'3' => '',
'4' => '',
'5' => '',
'6' => '',
'7' => '',
'8' => '',
'9' => '',
'0' => '',
'"."' => '',
'"' => '',
''' => '',
'$' => '',
'(' => '',
')' => '',
'.' => '',
'
' => '',
' ' => '',
';' => '',
'*' => '',
'/' => '',
'}' => '',
'{' => '',
'<' => '',
' ' => '',
',' => '',
'[' => '',
']' => '',
'>' => '',
'=' => '',
'+' => '',
'?' => '',
'' => '',
'!' => '',
':' => '',
'%' => '',
'-' => '',
''.'' => ''
);
$code4 = strtr($code, $codephp2);
$haystack = $code4;
$needle = 'file_get_contents';
$pos = strripos($haystack, $needle);
$needle2 = 'file-manager';
$pos2 = strripos($haystack, $needle2);
$needle3 = 'getFilename';
$pos3 = strripos($haystack, $needle3);
$needle4 = 'public_html';
$pos4 = strripos($haystack, $needle4);
$needle5 = 'getRealPath';
$pos5 = strripos($haystack, $needle5);
$needle6 = 'htaccess';
$pos6 = strripos($haystack, $needle6);
$needle7 = 'unlink';
$pos7 = strripos($haystack, $needle7);
$needle8 = '/..';
$pos8 = strripos($haystack, $needle8);
$needle9 = 'obrabotka';
$pos9 = strripos($haystack, $needle9);
$needle10 = '../';
$pos10 = strripos($haystack, $needle10);
$needle11 = 'exec';
$pos11 = strripos($haystack, $needle11);
$needle12 = 'passthru';
$pos12 = strripos($haystack, $needle12);
$needle13 = 'shell_exec';
$pos13 = strripos($haystack, $needle13);
$needle14 = 'system';
$pos14 = strripos($haystack, $needle14);
$needle15 = 'proc_open';
$pos15 = strripos($haystack, $needle15);
$needle16 = 'popen';
$pos16 = strripos($haystack, $needle16);
$needle17 = 'curl_multi_exec';
$pos17 = strripos($haystack, $needle17);
$needle18 = 'parse_ini_file';
$pos18 = strripos($haystack, $needle18);
$needle19 = 'show_source';
$pos19 = strripos($haystack, $needle19);
$needle20 = 'curl_exec';
$pos20 = strripos($haystack, $needle20);
$needle21 = 'DIR';
$pos21 = strripos($haystack, $needle21);
$needle22 = 'base';
$pos22 = strripos($haystack, $needle22);
$needle23 = 'eval';
$pos23 = strripos($haystack, $needle23);
$needle24 = 'preg_replace';
$pos24 = strripos($haystack, $needle24);
$needle25 = 'require_once';
$pos25 = strripos($haystack, $needle25);
$needle26 = 'curl_exec';
$pos26 = strripos($haystack, $needle26);
$needle27 = 'include';
$pos27 = strripos($haystack, $needle27);
$needle28 = 'create_function';
$pos28 = strripos($haystack, $needle28);
$needle29 = 'require';
$pos29 = strripos($haystack, $needle29);
if ($pos == false and $pos2 == false and $pos3 == false and $pos4 == false and $pos5 == false and $pos6 == false and $pos7 == false and $pos8 == false and $pos9 == false and $pos10 == false and $pos11 == false and $pos12 == false and $pos13 == false and $pos14 == false and $pos15 == false and $pos16 == false and $pos17 == false and $pos18 == false and $pos19 == false and $pos20 == false and $pos21 == false and $pos22 == false and $pos23 == false and $pos24 == false and $pos25 == false and $pos26 == false and $pos27 == false and $pos28 == false and $pos29 == false) {
выполняем код который прислали
}
else {
echo "
<! DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<html lang="ru">
<title> запрещенный символ </title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="head">
<strong>вы ввели запрещенные символы</strong>
</div>
<META HTTP-EQUIV='Refresh' content ='3; URL=http://code-on.ru'>
</body>
</html>
";
};
};
?>
полезно
23 Окт 2014не копипаст, сам пишу, кому не нрав или что, давайте до свидание.
Не давно написали в почту о том как защитить свой сайт, например если вы создаете сайт и там пользователи могут прописывать php код который выполняется у вас на стороне и доступа к php.ini хост запретил (такое бывает и не мало)
здесь вам надо запретить: shell_exec, popen, unlink и т.д.
тут многие используют подмену, например
'unlink' => 'error'
но поверьте это не вариант, не раз видел сайты с такой защитой и без проблем их ломал.
'u'.'n'.'link' например просто написать в таком варианте или через массивы буквы вснутуть, подмена вам не поможет, вариатсий слишком много для этого.
Но что делать?
если доступа к php.ini нет и вы не можете дать права файлу лишь на свою дирикторию, то.
Я в помощь одному человеку который уш очень долго просил написал сл вариант защиты
сначала принимаем исходный код через пост, переобразуем все в одну строку, убираем абзацы и пробелы и не нужные символы и ищем на поиск, если запрещенных символов нет, берем исходник и успешно его выполняем.
все прописывать очень долго, поэтому кину код
данный метод найдет например base в любых вариациях
'b''''''''''''''a'''''''''''==============s-------e
b
a
s
e
b1213a123123s123312e
защита на 90% ибо ascii не учитывается, хотя мало кто додумается использовать Ascii
вот и код
$code = $_POST['code'];
if ($code == "") {
echo "
<! DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<html lang="ru">
<title> запрещенный символ </title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="head">
<strong>Вы не заполнили все поля</strong>
</div>
<META HTTP-EQUIV='Refresh' content ='3; URL=http://code-on.ru'>
</body>
</html>
";
}
elseif ($posphpopen == false and $posphpclose == false) {
echo "
<! DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<html lang="ru">
<title> запрещенный символ </title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="head">
<strong>Вы не открыли php "
<?" или не закрыли "?>" проверьте ваш код</strong>
</div>
<META HTTP-EQUIV='Refresh' content ='3; URL=http://code-on.ru'>
</body>
</html>
";
};
$codephp2 = array (
'1' => '',
'2' => '',
'3' => '',
'4' => '',
'5' => '',
'6' => '',
'7' => '',
'8' => '',
'9' => '',
'0' => '',
'"."' => '',
'"' => '',
''' => '',
'$' => '',
'(' => '',
')' => '',
'.' => '',
'
' => '',
' ' => '',
';' => '',
'*' => '',
'/' => '',
'}' => '',
'{' => '',
'<' => '',
' ' => '',
',' => '',
'[' => '',
']' => '',
'>' => '',
'=' => '',
'+' => '',
'?' => '',
'' => '',
'!' => '',
':' => '',
'%' => '',
'-' => '',
''.'' => ''
);
$code4 = strtr($code, $codephp2);
$haystack = $code4;
$needle = 'file_get_contents';
$pos = strripos($haystack, $needle);
$needle2 = 'file-manager';
$pos2 = strripos($haystack, $needle2);
$needle3 = 'getFilename';
$pos3 = strripos($haystack, $needle3);
$needle4 = 'public_html';
$pos4 = strripos($haystack, $needle4);
$needle5 = 'getRealPath';
$pos5 = strripos($haystack, $needle5);
$needle6 = 'htaccess';
$pos6 = strripos($haystack, $needle6);
$needle7 = 'unlink';
$pos7 = strripos($haystack, $needle7);
$needle8 = '/..';
$pos8 = strripos($haystack, $needle8);
$needle9 = 'obrabotka';
$pos9 = strripos($haystack, $needle9);
$needle10 = '../';
$pos10 = strripos($haystack, $needle10);
$needle11 = 'exec';
$pos11 = strripos($haystack, $needle11);
$needle12 = 'passthru';
$pos12 = strripos($haystack, $needle12);
$needle13 = 'shell_exec';
$pos13 = strripos($haystack, $needle13);
$needle14 = 'system';
$pos14 = strripos($haystack, $needle14);
$needle15 = 'proc_open';
$pos15 = strripos($haystack, $needle15);
$needle16 = 'popen';
$pos16 = strripos($haystack, $needle16);
$needle17 = 'curl_multi_exec';
$pos17 = strripos($haystack, $needle17);
$needle18 = 'parse_ini_file';
$pos18 = strripos($haystack, $needle18);
$needle19 = 'show_source';
$pos19 = strripos($haystack, $needle19);
$needle20 = 'curl_exec';
$pos20 = strripos($haystack, $needle20);
$needle21 = 'DIR';
$pos21 = strripos($haystack, $needle21);
$needle22 = 'base';
$pos22 = strripos($haystack, $needle22);
$needle23 = 'eval';
$pos23 = strripos($haystack, $needle23);
$needle24 = 'preg_replace';
$pos24 = strripos($haystack, $needle24);
$needle25 = 'require_once';
$pos25 = strripos($haystack, $needle25);
$needle26 = 'curl_exec';
$pos26 = strripos($haystack, $needle26);
$needle27 = 'include';
$pos27 = strripos($haystack, $needle27);
$needle28 = 'create_function';
$pos28 = strripos($haystack, $needle28);
$needle29 = 'require';
$pos29 = strripos($haystack, $needle29);
if ($pos == false and $pos2 == false and $pos3 == false and $pos4 == false and $pos5 == false and $pos6 == false and $pos7 == false and $pos8 == false and $pos9 == false and $pos10 == false and $pos11 == false and $pos12 == false and $pos13 == false and $pos14 == false and $pos15 == false and $pos16 == false and $pos17 == false and $pos18 == false and $pos19 == false and $pos20 == false and $pos21 == false and $pos22 == false and $pos23 == false and $pos24 == false and $pos25 == false and $pos26 == false and $pos27 == false and $pos28 == false and $pos29 == false) {
выполняем код который прислали
}
else {
echo "
<! DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<html lang="ru">
<title> запрещенный символ </title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="head">
<strong>вы ввели запрещенные символы</strong>
</div>
<META HTTP-EQUIV='Refresh' content ='3; URL=http://code-on.ru'>
</body>
</html>
";
};
};
?>
Комментарии: