Забезпечення відповідності сайту вимогам PCI DSS
PCI DSS (Payment Card Industry Data Security Standard) - це стандарт безпеки для організацій, які обробляють дані платіжних карт. Розроблений Visa, Mastercard, Amex та іншими. Порушення ведуть до штрафів від платіжних систем, втрати права приймати карти, обов'язкового аудиту.
Рівні відповідності
| Рівень | Обсяг транзакцій | Вимоги |
|---|---|---|
| Level 1 | >6 млн в рік | Щорічний аудит QSA + квартальне сканування ASV |
| Level 2 | 1–6 млн в рік | Щорічний SAQ + квартальне сканування ASV |
| Level 3 | 20k–1M онлайн | Щорічний SAQ |
| Level 4 | <20k онлайн | Щорічний SAQ |
SAQ A — мінімальні вимоги для аутсорсингу
Якщо платіжна форма повністю віддана провайдеру (Stripe, Cloudpayments, ЮKassa) і дані карт ніколи не торкаються вашого сервера — застосовується SAQ A з мінімальним набором вимог.
<!-- Stripe Elements — платіжна форма на стороні Stripe -->
<div id="card-element"></div>
<script src="https://js.stripe.com/v3/"></script>
<script>
const stripe = Stripe('pk_live_...');
const elements = stripe.elements();
const card = elements.create('card');
card.mount('#card-element');
const { paymentMethod, error } = await stripe.createPaymentMethod({
type: 'card',
card: card,
});
</script>
Вимога 1: Мережа та брандмауер
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s trusted_ip -j ACCEPT
Вимога 3: Захист даних держателя карти
Якщо зберігаються дані карти (PAN):
class CardStorageService
{
public function storePan(string $pan): array
{
return [
'masked_pan' => substr($pan, 0, 6) . '******' . substr($pan, -4),
'last_four' => substr($pan, -4),
];
}
}
Ніколи не зберігати: CVV/CVC, PIN, повну смугу магнітної карти.
Вимога 4: Шифрування при передачі
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
Вимога 7-8: Доступ та аутентифікація
class AdminAuthController extends Controller
{
public function login(Request $request)
{
if (!$this->verifyTotp($request->totp_code, auth()->user())) {
abort(401, '2FA потрібна для відповідності PCI DSS');
}
}
}
2FA обов'язкова для доступу до CDE. Блокування після 6 невдалих спроб. Timeout сесії 15 хвилин.
Шлях до відповідності для типового інтернет-магазину
1. Перейти на Stripe/ЮKassa з iframe → SAQ A
2. Включити HTTPS всюди, TLS 1.2+
3. Квартальне сканування ASV
4. Заповнити SAQ A (22 питання)
5. Зареєструвати SAQ у еквайєра
Тривалість реалізації
- SAQ A: переходод на iframe + базова настройка: 5–10 днів
- Квартальне сканування ASV: автоматизований процес







