Безопасность Предотвращение внедрения Php. С помощью описанного выше процесса мы можем понять принципы и методы внедрения Php. Конечно, мы также можем разработать соответствующие методы предотвращения:
Первый — это настройки безопасности сервера. Мы уже говорили о настройках безопасности Windows-сервера и не будем повторять их снова. Основные из них — это настройки безопасности php+mysql и настройки безопасности хоста Linux. . Чтобы предотвратить внедрение php+mysql, сначала установите для Magic_quotes_gpc значение On, а для display_errors значение Off. Если это тип id, мы используем функцию intval() для преобразования его в целочисленный тип, как показано в коде:
$id=intval($id);
mysql_query="select *from example, где articieid='$id'"; Или напишите так: mysql_query("SELECT * FROMarticle WHEREarticleid=".intval($id)."")
Если это символьный тип, используйте addslashes() Отфильтруйте его, а затем отфильтруйте "%" и "_", например:
$search=addslashes($search);
$search=str_replace(“_””,_”,$search);
$search=str_replace(“%””,%”,$search);
Конечно, вы также можете добавить общий код защиты от внедрения PHP:
/******************************
Описание общего кода безопасности PHP для защиты от инъекций:
Определите, содержит ли переданная переменная недопустимые символы, такие как $_POST, $_GET.
Функция:
Антиинъекционный
******************************/
//Недопустимые символы, подлежащие фильтрации
$ArrFiltrate=array("'",";","union");
//URL-адрес, по которому можно перейти после возникновения ошибки. Если не заполнить, по умолчанию будет использоваться предыдущая страница.
$StrGoUrl="";
//Есть ли значение в массиве
функция FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate as $key=>$value){
if (eregi($value,$StrFiltrate)){
вернуть истину;
}
}
вернуть ложь;
}
//Объединяем $_POST и $_GET
если (function_exists (array_merge)) {
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}еще{
foreach($HTTP_POST_VARS как $key=>$value){
$ArrPostAndGet[]=$значение;
}
foreach($HTTP_GET_VARS как $key=>$value){
$ArrPostAndGet[]=$значение;
}
}
//Начинается проверка
foreach($ArrPostAndGet как $key=>$value){
если (FunStringExist($value,$ArrFiltrate)){
echo "alert(/"Ниао подсказка, недопустимый символ/");";
если (пусто($StrGoUrl)){
echo "history.go(-1);";
}еще{
echo "window.location=/"".$StrGoUrl."/";";
}
Выход;
}
}
?>
/******************************
Сохранить как checkpostandget.php www.devdao.com.
Затем добавьте include("checkpostandget.php"); перед каждым файлом php.
******************************/
Кроме того, имя пользователя и пароль администратора зашифрованы md5, что может эффективно предотвратить внедрение PHP.
Также необходимо усилить некоторые меры безопасности на сервере и MySQL.
Для настроек безопасности Linux-сервера:
Чтобы зашифровать пароль, используйте инструмент «/usr/sbin/authconfig», чтобы включить функцию теневого копирования пароля и зашифровать пароль.
Чтобы запретить доступ к важным файлам, войдите в командный интерфейс Linux и введите в командной строке:
#chmod 600 /etc/inetd.conf //Изменить атрибуты файла на 600
#chattr +I /etc/inetd.conf // Убедитесь, что владельцем файла является root
#chattr –I /etc/inetd.conf // Ограничить изменения в этом файле
Чтобы запретить любому пользователю переход на root-пользователя с помощью команды su, добавьте следующие две строки в начало файла конфигурации su, то есть каталога /etc/pam.d/:
Достаточная аутентификация /lib/security/pam_rootok.so отладка
Требуется авторизация /lib/security/pam_whell.so group=wheel
Удалить все специальные учетные записи
#userdel lp и т. д. удалить пользователя
#groupdel lp и т. д. Удалите группу, чтобы запретить неиспользуемые программы suid/sgid.
#find / -type f (-perm -04000 - o –perm -02000 ) -execls –lg {} ;