Отправляет email-рассылки с помощью сервиса Sendsay

Секреты программирования

  Все выпуски  

Секреты программирования - сканирование директорий в ASP


Уважаемые подписчики!

Сегодняшняя тема - сканирование директорий в ASP.
С одним моим другом приключилась беда. Его сайт взломали хакеры. Сайт был сделан на скорую руку, безопасности уделялось мало внимания. Человек не ожидал, что его сайт будет удостоен внимания "уважаемых людей". "Но на то и щука в пруду, чтоб карась не дремал". Через "дырку" в аплоуде злоумышленники загрузили скрипт и запустили его. В результате во всех поддиректориях оказались "левые" индексные файлы. Можно сказать, товарищ отделался легким испугом.
Я немножко поучаствовал в востановлении сайта. В аплоуд добавили проверку на тип загружаемых файлов. В директориях, куда происходит загрузка, запретили выполнение скриптов. Я написал 2 простенькие подпрограммы для чистки поддиректорий и поиска "левых" файлов.

Код


'поиск в поддиректориях файла с именем file и удаление
functionSub SearchSubFolders( Folder, file, bDelete )
 dim Subfolder
 For Each Subfolder in Folder.SubFolders
  
  if fso.FileExists( Subfolder.Path & "\" & file ) then
   Response.Write Subfolder.Path & " - " & file & "<br>" & Chr(10)
   if bDelete then
    call fso.DeleteFile( Subfolder.Path & "\" & file, true )
    call fso.DeleteFile( Subfolder.Path & "\index.htm", true )
   end if
  end if
  
  SearchSubFolders Subfolder, file, bDelete
 Next
End Sub

'поиск запрещенных скриптов
Sub CheckFiles( Folder, recursive )
 dim Subfolder, file, s
 
 For Each file in Folder.Files
  s = LCase( file.Path )
  if InStr( s, ".asp" ) > 0 or InStr( s, ".php" ) > 0 then
   Response.Write s & "<br>" & Chr(10)
  end if
 Next
 
 if recursive then
  For Each Subfolder in Folder.SubFolders
   CheckFiles Subfolder, recursive
  Next
 end if
End Sub

bDelete = false
if Request.QueryString( "delete" ) = "1" then bDelete = true

sRealDir = Server.MapPath( "/" )
Set fso = Server.CreateObject("Scripting.FileSystemObject")

set folder = fso.GetFolder( sRealDir )
SearchSubFolders folder, "rtls.html", bDelete

set folder = fso.GetFolder( sRealDir & "\greetings"  )
CheckFiles folder, false


Комментарии

Первым делом создаем объект fso для работы с файловой системой. А затем "эксплуатируем" его методы и свойства. "Дешево и сердито".

Для улучшения "обратной связи" приглашаю обсудить рассылку на форуме сайта http://www.pvobr.ru в разделе "Программирование". Пишите также, какие темы вы хотите рассмотреть в будущем.

Успехов!
Андрей

В избранное