파일을 저장하기 전에 파일 업로드를 확인하려면 어떻게해야합니까?MVC3에서 바이러스 업로드 파일 확인
이전에이 주제를 읽었지 만 프로그래밍 방식으로 사용자에게 결과를 반환하려면 어떻게해야합니까? 어떤 종류의 사용자가 업로드 된 파일 문제를 방지하기 위해
가장 좋은 방법은 당신이 업로드 한 후 파일을 검사 에 사용하는 서버의 명령 줄 바이러스 스캐너를 가지고 입니다. 스캐너 결과가 긍정적 인 경우, 소포스 API를 살펴 보자 에게 파일 등
파일을 저장하기 전에 파일 업로드를 확인하려면 어떻게해야합니까?MVC3에서 바이러스 업로드 파일 확인
이전에이 주제를 읽었지 만 프로그래밍 방식으로 사용자에게 결과를 반환하려면 어떻게해야합니까? 어떤 종류의 사용자가 업로드 된 파일 문제를 방지하기 위해
가장 좋은 방법은 당신이 업로드 한 후 파일을 검사 에 사용하는 서버의 명령 줄 바이러스 스캐너를 가지고 입니다. 스캐너 결과가 긍정적 인 경우, 소포스 API를 살펴 보자 에게 파일 등
에 삭제 https://secure.sophos.com/partners/oem/integration/savdi.html
는 "SAV 동적 인터페이스 (SAVDI은) 쉬운 통합, 범용 인터페이스를 제공합니다 모든 언어로 작성된 프로그램이 맬웨어에 대한 파일 및 데이터를 검색 할 수있게 해주 며 특히 .NET 환경에서 실행되는 ISP/ASP에 널리 사용됩니다. "
또 다른 대안은 Process 클래스를 사용하여 서버에서 바이러스 백신 스캐너를 시작하고() 해당 결과를 구문 분석하는 것입니다. 예를 들어 AVG의 명령 줄 매개 변수 목록은 다음과 같습니다. http://www.avg.com/ww-en/faq.num-3604.
그런데 솔루션을 개발할 때 감염된 파일을 식별 할 수 있는지 테스트해야합니다. 그러나 실제 감염된 파일을 사용하는 것은 권장되지 않습니다. 그러나 아래 문자열로 텍스트 파일을 만들 수 있습니다. 이 문자열은 일반적으로 바이러스 백신 검색 프로그램에서 테스트 목적으로 감염된 파일로 식별됩니다 (자세한 내용은 EICAR 표준 안티 바이러스 테스트 파일 검색 참조).
* AP [4 \ PZX54 (P ^) 7CC) @ X5O!의 P %의 7} $ EICAR-STANDARD-ANTIVIRUS-TEST-FILE! $ H + H **
처럼 스캔 온라인 리소스를 시도 바이러스 총계 또는 유사. 또한 아시다시피 Kaspersky에는 온라인 스캐너가 있지만 일시적으로 사용할 수 없습니다. 당신이 당신의 인생을 더 쉽게하려면 바이러스 백신 소프트웨어를 설치하려면이 서버에 파일을 업로드를 스캔하여 대상 서버
이 작업을 수행하는 경우 사이트의 서비스 약관을 확인하십시오. 그런 용도로 허용하지 않는 것이 좋습니다 (적어도 무료는 아니며 비용을 지불 할 수있는 상업 서비스가있을 수 있음) –
이것은 좋은 옵션이지만 파일을 스캔하는 데 몇 시간이 걸리면 웹 사이트에서 양식을 제출하는 데 덜 효과적입니다 ... –
에 전송할 수있는 프록시 서버를 만들 수 있습니다보기의 응용 프로그램 관점에서
... Metascan Online을 확인하십시오. 그들은 무료 공개 API를 온라인으로 제공합니다. 앞으로 Metascan Online 공용 API를 사용하여 프로그래밍 방식으로이를 수행 할 수있는 방법을 설정할 수도 있습니다.Sample Code(PHP)
// Config.
$api = 'https://api.metascan-online.com/v1/file';
$apikey = 'E1D7-DG5E-4FE0-BFAE';
$file = 'test.txt';
// Build headers array.
$headers = array(
'apikey: '.$apikey,
'filename: '.basename($file)
);
// Build options array.
$options = array(
CURLOPT_URL => $api,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => file_get_contents($file),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false
);
// Init & execute API call.
$ch = curl_init();
curl_setopt_array($ch, $options);
$response = json_decode(curl_exec($ch), true);
print_r($response);
다중 검색을 중요시하는 엔진입니다. 또한 40 개가 넘는 엔진을 사용하여 파일을 검사합니다.
나는 매우 비슷한 문제를 해결하기 위해 찾고 있었고 메모리 스캐닝에서 많은 것을 발견하지 못했습니다. 필자가 발견 한 대부분의 예제는 파일을 디스크에 쓰고 일부 변수를 다른 프로세스에 전달하여 디스크의 파일을 검사하는 작업을 포함합니다.
그래서 솔루션에서 나는 단지 HttpPostedFileBase.InputStream
을 사용하고이를 검색하기 위해 ClamAv로 보냅니다. MVC와 QED에서 작동하도록하는 코드는별로 없습니다. VirusScannerFactory의 구현이 AV 공급 업체에 적합하게 확장 할 수
/// Main controller
public class HomeController : Controller {
/// Get the upload view
[HttpGet]
public ActionResult Index() {
return View();
}
/// Handle the file upload
[HttpPost]
public ActionResult Index(UploadViewModel model, HttpPostedFileBase file) {
var scanner = VirusScannerFactory.GetVirusScanner();
var result = scanner.ScanStream(file.InputStream);
if(result.IsVirusFree) {
// save to disk
} else {
// don't save to disk and tell user they uploaded a virus
}
return View(model);
}
}
:
그래서 당신의 MVC 컨트롤러에서, 다음과 같이해야합니다.public class VirusScannerFactory {
public static IScanViruses GetVirusScanner() {
//Currently we only have one Antivirus implementation,
//but later we want to include AVG, SOPHOS and metascan
return new ClamAvScanner();
}
}
public interface IScanViruses {
ScanResult ScanFile(string fullPath);
ScanResult ScanBytes(byte[] bytes);
ScanResult ScanStream(Stream stream);
}
예를 들어 nClam 및 ClamAv를 사용했습니다. 전체 ClamAV를 구현 found on github 될 수 있지만, 당신이 메모리 작업하는 스트림을 얻는 방법의 조각은 내가 ClamAV를 사용하여이 작업을 수행하는 방법에 대한 자세한 내용과 함께 blog post을 만들어
public class ClamAvScanner : IScanViruses{
... snip ...
/// Scans your data stream for virus
public ScanResult ScanStream(Stream stream) {
var clam = new ClamClient("localhost", 3310);
return MapScanResult(clam.SendAndScanFile(stream));
}
...snip ...
/// helper method to map scan result
private ScanResult MapScanResult(ClamScanResult scanResult) {
var result = new ScanResult();
switch (scanResult.Result) {
case ClamScanResults.Unknown:
result.Message = "Could not scan file";
result.IsVirusFree = false;
break;
case ClamScanResults.Clean:
result.Message = "No Virus found";
result.IsVirusFree = true;
break;
case ClamScanResults.VirusDetected:
result.Message = "Virus found: " + scanResult.InfectedFiles.First().VirusName;
result.IsVirusFree = false;
break;
case ClamScanResults.Error:
result.Message = string.Format("VIRUS SCAN ERROR! {0}", scanResult.RawResult);
result.IsVirusFree = false;
break;
}
return result;
}
}
이하입니다.
URL이 이동하거나 죽으면 유용하지 않게되므로 다른 사이트에 대한 링크는 주로 사용하지 마십시오. /기타. 블로그에서 발췌 한 일부 발췌 내용을 답변으로 편집 할 수 있습니까? –
여기에 요약,이 주제의 연구를 좀했다. (I Windows를 사용하고 같은 그것은, Windows 및 C#을 위해 주로 우리가 시만텍 안티 바이러스 소프트웨어를 사용하는)
시만텍 제품 :
a. Systemtec 스캔 엔진. : 바이러스 백신 서비스 인 과 같으며 시스템에 통합 할 수있는 SDK를 제공합니다.
b. Doscan.exe : 회사 시스템에서 찾을 수있는 명령 줄 도구입니다. 우리는 파일을 스캔 할 새 프로세스를 만들어 코드에서 사용할 수 있습니다. 은 Symantec 스캐너와 동일한 스캔 프로세스를 사용합니다. 따라서 소프트웨어가 장시간 스캔을 수행 할 때 차단되는 것은 입니다.
AntiVirusscanner이
이 라이브러리 안티 바이러스 소프트웨어 제품의 래퍼입니다 (예 : "마이크로 소프트 시큐리티 에센셜 (Windows Defender는)")를 가 윈도우 OS에 설치되어 있어야합니다. 내 컴퓨터에서 시만텍의 실시간 검사를 중지 할 수 없으므로 제대로 작동하는지 몰라. 사용자가 작동하지 않는다고 말했지만 확인하지 않았습니다.
Windows Defender를 :
그것은 안티 바이러스 소프트웨어 빌드 - 윈도우 시스템입니다. 그리고 그것은 commend line tool (mpcmdrun.exe)을 가지고 있다고하지만, 내 컴퓨터에서 찾을 수 없습니다. 시만텍을 사용하면서 장애가되었습니다. 당신은 그것을 가지고 시도해 볼 수 있습니다.
오픈 소스 안티 바이러스 제품
ClamAV의 인기입니다. 일부 제품을 시스템에 통합 할 수 있습니다. 그리고 그것은 C# API를 가지고 있으므로 도 사설 클라우드 검색 엔진을 만들 수 있습니다.
상업용 스캔 엔진 공개 API : Virustotal 및 Sophos.
안녕하세요, 저는이 작업을 어떻게 관리했는지, 그리고 어떤 솔루션을 사용하는 것이 가장 좋았는지 공유 할 수 있는지 궁금합니다. –
IAttachmentExecute API를 사용할 수 있습니다. [이 대답은 당신을 도울 수 있습니다] (http://stackoverflow.com/a/35684198/1442180) – Fred
IAttachmentExecute API를 사용할 수 있습니다. [이 대답은 당신을 도울 수 있습니다] (http : // stackoverflow.com/a/35684198/1442180) – Fred