subtest 'SQL Injection спроби' => sub { my @injections = ( "'; DROP TABLE users; --", "1' OR '1'='1", "admin' --", "'); EXEC xp_cmdshell('dir'); --" ); for my $inj (@injections) { my $res = $test->request(POST '/', Content => { csrf_token => 'valid', name => $inj, age => '30', email => 'test@test.com' }); is $res->code, 200, "Injection '$inj' не зламав систему"; unlike $res->content, qr{DROP TABLE|xp_cmdshell}, 'Не виконав шкідливий SQL'; } }; subtest 'Дуже довгі значення' => sub { my $very_long = 'A' x 10_000; my $res = $test->request(POST '/', Content => { csrf_token => 'valid', name => $very_long, age => '30', email => 'test@test.com' }); like $res->content, qr{надто довгий|Помилки вводу}, 'Обмеження довжини працює'; }; subtest 'Некоректний Content-Type' => sub { my $res = $test->request( POST '/', Content_Type => 'multipart/form-data', # або взагалі без Content => 'junk data' ); isnt $res->code, 200, 'Не 200 при некоректному форматі'; };