Как проверить файл AWS S3 на наличие каких-либо угроз в Nodejs
Проверка загружаемых файлов на наличие угроз в хранилище так же важна, как и проверка файлов в процессе загрузки.
Уже несколько лет AWS S3 прочно занимает лидирующие позиции среди облачных хранилищ для загрузки файлов из веб-форм (и других способов хранения). Подобное весьма доступное, долговечное и легко масштабируемое решение идеально подходит для любого развивающегося онлайн-бизнеса.
Конечно, файлы, попавшие в S3 или любое другое облачное хранилище, хранятся там не только просто в целях хранения. Ведь пользовательский контент приобретается не просто так. Мы ожидаем, что заинтересованные лица внутри и вне нашего бизнеса будут работать с контентом с определенной целью, а это означает, что файлы в хранилище будут перемещаться.
Это, к сожалению, делает «облачные» хранилища отличной мишенью для угроз со стороны клиента.
Загрузив вредоносный файл в бакет S3 через небезопасную веб-форму, потенциально опасный субъект может осуществить серию атак на наши данные.
В отличие от стратегий, связанных со спамом (например, фишинговых писем), этот подход требует меньше усилий по социальной инженерии и больше усилий по разработке интеллектуальной полезной нагрузки.
Изощренные вредители могут создавать чрезвычайно убедительные вредоносные файлы, способные обходить традиционные антивирусные решения и другие базовые политики безопасности, и если мы позволим этим файлам оставаться незамеченными в наших бакетах S3, они могут разрушить нашу с Вами деловую репутацию.
К счастью, с помощью всего лишь нескольких строк кода (приведены ниже) мы можем воспользоваться API, который одновременно выполняет и детерминированную (основанную на правилах) проверку на угрозы, и сигнатурную проверку на вирусы и вредоносное ПО для файлов в бакете AWS S3.
Вместо того чтобы доверять файлам с правильными расширениями и без признаков вредоносного ПО, мы сможем заглянуть вглубь подозрительных файлов и убедитьсяв том, что их содержимое строго соответствует принятым стандартам форматирования файлов.
С помощью проверки содержимого мы сможем выявлять недействительные файлы (например, поддельные PDF-файлы), скрытые исполняемые файлы, скрипты, макросы и другие типы угроз.
Чтобы получить файлы из бакета S3, нам понадобится следующая информация о доступе из нашей учетной записи AWS:
- Ключ доступа
- Секретный ключ
- Регион бакета
- Имя бакета
- Имя ключа
Получив всю эту информацию, мы можем приступить к структурированию нашего вызова API.
Для начала выполним приведенную ниже команду NPM и установим клиентский SDK:
npm install cloudmersive-virus-api-client --save
Или добавим клиент Node в наш package.json
"dependencies": {
"cloudmersive-virus-api-client": "^1.1.9"
}
Далее давайте воспользуемся приведенным ниже готовым к запуску кодом для вызова функции сканирования файлов AWS S3. Нам понадобится (как минимум) бесплатный API-ключ Cloudmersive для авторизации наших запросов (это позволит нам выполнять до 800 сканирований файлов в месяц без каких-либо обязательств):
var CloudmersiveVirusApiClient = require('cloudmersive-virus-api-client');
var defaultClient = CloudmersiveVirusApiClient.ApiClient.instance;
// Configure API key authorization: Apikey
var Apikey = defaultClient.authentications['Apikey'];
Apikey.apiKey = 'YOUR API KEY';
var apiInstance = new CloudmersiveVirusApiClient.ScanCloudStorageApi();
var accessKey = "accessKey_example"; // String | AWS S3 access key for the S3 bucket; you can get this from My Security Credentials in the AWS console
var secretKey = "secretKey_example"; // String | AWS S3 secret key for the S3 bucket; you can get this from My Security Credentials in the AWS console
var bucketRegion = "bucketRegion_example"; // String | Name of the region of the S3 bucket, such as 'US-East-1'
var bucketName = "bucketName_example"; // String | Name of the S3 bucket
var keyName = "keyName_example"; // String | Key name (also called file name) of the file in S3 that you wish to scan for viruses. If the key name contains Unicode characters, you must base64 encode the key name and prepend it with 'base64:', such as: 'base64:6ZWV6ZWV6ZWV6ZWV6ZWV6ZWV'.
var callback = function(error, data, response) {
if (error) {
console.error(error);
} else {
console.log('API called successfully. Returned data: ' + data);
}
};
apiInstance.scanCloudStorageScanAwsS3File(accessKey, secretKey, bucketRegion, bucketName, keyName, callback);
Вот и весь код, который нам понадобится! Теперь, прежде чем поделиться файлами с внутренними или внешними пользователями, мы можем просканировать их напрямую в наших экземплярах S3, чтобы убедиться в их чистоте.




