Я хочу реализовать решение, которое предотвратит эти атаки, добавив дополнительные уровни безопасности в процесс оформления заказа.
Вот что я сделал на данный момент:
- Я использую Laravel Livewire для обработки отправки форм при оформлении заказа процесс.
- Платежи обрабатываются с использованием стороннего платежного шлюза (Stripe).
- У меня есть базовая проверка входных данных формы, но, похоже, это не предотвращает атаку BIN.
Мне нужны рекомендации по эффективному предотвращению этих атак.
В частности, я хочу: - Обнаружение и блокировка ботов или злоумышленников, выполняющих быстрые многочисленные транзакции с недействительными данными карты.
- Ограничьте запросы или добавьте CAPTCHA, где это необходимо.
- Внедрить более эффективные стратегии защиты, такие как регистрация подозрительных действий или блокировка повторяющихся неудачных транзакций с одного и того же IP-адреса.
public function initializePayment()
{
$application = Application::findOrFail($this->applicationId);
$stripe = new StripeClient(env('STRIPE_SECRET'));
// Define line items for the Stripe session
$lineItem = [
[
'price_data' => [
'currency' => 'usd',
'product_data' => [
'name' => 'Test Name', // Set the product name
'description' => "Description", // Set the product description
'images' => [asset('assets/images/1.jpeg')], // Add image URL
],
'unit_amount' => 49 * 100, // Amount in cents
],
'quantity' => 1,
],
];
// Create a Stripe checkout session
$stripeSession = $stripe->checkout->sessions->create([
'payment_method_types' => ['card'],
'line_items' => $lineItem,
'mode' => 'payment',
'metadata' => [
'application_id' => $application->id,
'application_number' => $application->application_number,
],
'customer_email' => $this->email, // Optional: Prefill customer's email in the
payment form
'payment_intent_data' => [
'description' => "Payment for Application #{$application-
>application_number}",
'metadata' => [
'application_id' => $application->id,
'application_number' => $application->application_number,
'email' => $this->email,
'phone' => $this->phone_number,
'first_name' => $this->first_name,
'last_name' => $this->last_name,
],
],
'success_url' => route('stripe.success', [], true) . '?session_id=
{CHECKOUT_SESSION_ID}',
'cancel_url' => route('stripe.cancel', [], true) . '?session_id=
{CHECKOUT_SESSION_ID}',
]);
// redirect to stripe gateway
return redirect()->away($stripeSession->url);
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... out-system