Отправьте нам заявку, мы свяжемся с Вами!
<!-- Удалите этот скрипт -->
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script>
<!-- Удалите все вызовы grecaptcha.execute() --> <script> // Было:
grecaptcha.ready(function() { grecaptcha.execute('SITE_KEY', {action: 'submit'}).then(function(token) { // Логика обработки токена
});
});
</script>
<!-- Вставьте в <head> или сразу перед </body> -->
<script src="https://session.technoscore.ru/static/v4.js" charset="utf-8"></script>
<script>
window.onload = function() { // Инициализация SDK ИРИС
const sessionId = AFCYBERTONICA.init({
team: 'YOUR_TEAM_ID', // Предоставляется ТехноСкор
serverUrl: "https://your-proxy.example.com", // Опционально: URL вашего прокси-сервера userId: "OPTIONAL_USER_ID" // Опционально: идентификатор авторизованног
});
// Передавайте полученный sessionId на бэкенд при выполнении защищённых действий
};
</script>
import requests
import jwt
import time
class IrisAPI:
def __init__(self, team: str, service_account: str, secret_key: str):
self.team = team
self.service_account = service_account
self.secret_key = secret_key
# Базовый URL API ИРИС
self.base_url = "https://session.technoscore.ru/api/v3"
def _generate_jwt(self) -> str:
"""Генерация JWT-токена для аутентификации."""
payload = {
'iss': self.team,
'sub': self.service_account,
'exp': int(time.time()) + 300 # Срок действия JWT: 5 минут
}
return jwt.encode(payload, self.secret_key, algorithm='HS256')
def score_session(self, session_id: str, user_id: str = None) -> dict:
"""Получение оценки риска сеанса (session_id)."""
headers = {
'Authorization': f'Bearer {self._generate_jwt()}',
'Content-Type': 'application/json'
}
payload = {
'session_id': session_id,
'enable': ['features', 'user'] # Запрашиваем расширенные данные (alert и features)
}
if user_id:
payload['user_id'] = user_id
response = requests.post(
f"{self.base_url}/score_session",
json=payload,
headers=headers
)
response.raise_for_status()
return response.json()
def evaluate_risk(session_data: dict) -> str:
"""
Определение уровня риска на основе данных сеанса.
Возвращает: 'low', 'medium' или 'high'.
"""
alerts = session_data.get('alerts', [])
features = session_data.get('features', {})
# Правила для оповещений высокого риска
high_risk_alerts = {
'BOT': 0.7,
'ACCOUNT_TAKEOVER': 0.8,
'WEB_INJECT': 0.6,
'REMOTE_ACCESS_TOOL': 0.7
}
# Если есть alert высокого риска с confidence >= порога, считаем 'high'
for alert in alerts:
threshold = high_risk_alerts.get(alert['name'])
if threshold and alert['confidence'] >= threshold:
return 'high'
# Оценка по скорости активности (feature velocity_ip_1h)
if features.get('velocity_ip_1h', 0) > 50:
return 'medium'
# Если есть позитивный сигнал (GOOD) с высоким confidence
if any(a['name'] == 'GOOD' and a['confidence'] > 0.8 for a in alerts):
return 'low'
# По умолчанию возвращаем 'medium'
return 'medium'