{"id":102976,"date":"2025-03-24T18:47:42","date_gmt":"2025-03-24T14:17:42","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/security-testing-for-sdets-the-power-of-zap-in-automated-tests-1bol\/"},"modified":"2025-03-24T18:47:42","modified_gmt":"2025-03-24T14:17:42","slug":"security-testing-for-sdets-the-power-of-zap-in-automated-tests-1bol","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/security-testing-for-sdets-the-power-of-zap-in-automated-tests-1bol\/","title":{"rendered":"\u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u0645\u0646\u06cc\u062a\u06cc SDET: \u0642\u062f\u0631\u062a ZAP \u062f\u0631 \u062a\u0633\u062a \u0647\u0627\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631"},"content":{"rendered":"<div data-article-id=\"2353666\" id=\"article-body\">\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u0647\u0646\u062f\u0633\u06cc\u0646 \u062a\u0648\u0633\u0639\u0647 \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631 \u062f\u0631 \u062a\u0633\u062a (SDETS) \u060c \u0645\u0627 \u0628\u0631\u0627\u06cc \u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646 \u063a\u0631\u06cc\u0628\u0647 \u0646\u06cc\u0633\u062a\u06cc\u0645. \u0645\u0627 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u060c \u0639\u0645\u0644\u06a9\u0631\u062f \u0648 \u0642\u0627\u0628\u0644\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0633\u0627\u0632\u06cc\u0645. \u0627\u0645\u0627 \u062f\u0631 \u0686\u0634\u0645 \u0627\u0646\u062f\u0627\u0632 \u062a\u0647\u062f\u06cc\u062f \u0627\u0645\u0631\u0648\u0632 \u060c <strong>\u062a\u0633\u062a \u0627\u0645\u0646\u06cc\u062a\u06cc<\/strong> \u062f\u06cc\u06af\u0631 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u06cc\u06a9 \u0646\u062a\u06cc\u062c\u0647 \u0628\u0627\u0634\u062f &#8211; \u0648 \u0627\u06cc\u0646 \u062c\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 <em>OWASP ZAP<\/em> (Zed Attack Proxy) \u0645\u06cc \u062f\u0631\u062e\u0634\u062f. \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0686\u0631\u0627 \u0627\u062f\u063a\u0627\u0645 ZAP \u062f\u0631 \u062a\u0633\u062a \u0647\u0627\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u0634\u0645\u0627 \u0627\u0647\u0645\u06cc\u062a \u062f\u0627\u0631\u062f \u0648 \u0686\u06af\u0648\u0646\u0647 \u0646\u0642\u0634 \u0634\u0645\u0627 \u062f\u0631 \u062a\u0623\u0645\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/security-testing-for-sdets-the-power-of-zap-in-automated-tests-1bol\/#%DA%86%D8%B1%D8%A7_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4_%D8%A7%D9%85%D9%86%DB%8C%D8%AA%DB%8C_%D8%A8%D8%B1%D8%A7%DB%8C_SDET_%D8%A7%D9%87%D9%85%DB%8C%D8%AA_%D8%AF%D8%A7%D8%B1%D8%AF\" >\u0686\u0631\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0628\u0631\u0627\u06cc SDET \u0627\u0647\u0645\u06cc\u062a \u062f\u0627\u0631\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/security-testing-for-sdets-the-power-of-zap-in-automated-tests-1bol\/#OWASP_ZAP_%DA%86%D8%A7%D9%82%D9%88%DB%8C_%D8%A7%D8%B1%D8%AA%D8%B4_%D8%B3%D9%88%D8%A6%DB%8C%D8%B3_%D8%A7%D9%85%D9%86%DB%8C%D8%AA%DB%8C_SDET\" >OWASP ZAP: \u0686\u0627\u0642\u0648\u06cc \u0627\u0631\u062a\u0634 \u0633\u0648\u0626\u06cc\u0633 \u0627\u0645\u0646\u06cc\u062a\u06cc SDET<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/security-testing-for-sdets-the-power-of-zap-in-automated-tests-1bol\/#%D8%A7%D8%AF%D8%BA%D8%A7%D9%85_ZAP_%D8%AF%D8%B1_%DA%86%D8%A7%D8%B1%DA%86%D9%88%D8%A8_%D8%AE%D9%88%D8%AF_%D9%85%D8%B2%D8%A7%DB%8C%D8%A7%DB%8C_%DA%A9%D9%84%DB%8C%D8%AF%DB%8C\" >\u0627\u062f\u063a\u0627\u0645 ZAP \u062f\u0631 \u0686\u0627\u0631\u0686\u0648\u0628 \u062e\u0648\u062f: \u0645\u0632\u0627\u06cc\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/security-testing-for-sdets-the-power-of-zap-in-automated-tests-1bol\/#%D9%86%D8%AD%D9%88%D9%87_%D8%A7%D8%AF%D8%BA%D8%A7%D9%85_ZAP_%D8%A8%D8%A7_Selenium_testng\" >\u0646\u062d\u0648\u0647 \u0627\u062f\u063a\u0627\u0645 ZAP \u0628\u0627 Selenium + testng<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/security-testing-for-sdets-the-power-of-zap-in-automated-tests-1bol\/#%D9%86%D9%85%D8%A7%DB%8C_%DA%A9%D9%84%DB%8C_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C\" >\u0646\u0645\u0627\u06cc \u06a9\u0644\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/security-testing-for-sdets-the-power-of-zap-in-automated-tests-1bol\/#%D9%82%D8%B7%D8%B9%D9%87_%DA%A9%D8%AF_%D9%85%D8%AB%D8%A7%D9%84_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C_%D9%87%D8%A7\" >\u0642\u0637\u0639\u0647 \u06a9\u062f \u0645\u062b\u0627\u0644 (\u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/security-testing-for-sdets-the-power-of-zap-in-automated-tests-1bol\/#%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87\" >\u067e\u0631\u0648\u0646\u062f\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/security-testing-for-sdets-the-power-of-zap-in-automated-tests-1bol\/#%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%D9%85%D8%B1%D8%AD%D9%84%D9%87\" >\u062a\u0639\u0631\u06cc\u0641 \u0645\u0631\u062d\u0644\u0647<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/security-testing-for-sdets-the-power-of-zap-in-automated-tests-1bol\/#%DA%86%D8%A7%D9%84%D8%B4_%D9%87%D8%A7_%D9%88_%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86_%D8%B4%DB%8C%D9%88%D9%87_%D9%87%D8%A7\" >\u0686\u0627\u0644\u0634 \u0647\u0627 \u0648 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0634\u06cc\u0648\u0647 \u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/security-testing-for-sdets-the-power-of-zap-in-automated-tests-1bol\/#%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%DA%AF%DB%8C%D8%B1%DB%8C_%D8%A7%D9%85%D9%86%DB%8C%D8%AA_%D8%A7%D8%B3%D8%AA_%D8%B4%D9%85%D8%A7_%D9%85%D8%B3%D8%A6%D9%88%D9%84%DB%8C%D8%AA_%D8%A7%DA%A9%D9%86%D9%88%D9%86\" >\u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc: \u0627\u0645\u0646\u06cc\u062a \u0627\u0633\u062a \u0634\u0645\u0627 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0627\u06a9\u0646\u0648\u0646<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%D8%B1%D8%A7_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4_%D8%A7%D9%85%D9%86%DB%8C%D8%AA%DB%8C_%D8%A8%D8%B1%D8%A7%DB%8C_SDET_%D8%A7%D9%87%D9%85%DB%8C%D8%AA_%D8%AF%D8%A7%D8%B1%D8%AF\"><\/span>\n<p>  \u0686\u0631\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0628\u0631\u0627\u06cc SDET \u0627\u0647\u0645\u06cc\u062a \u062f\u0627\u0631\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>\n<p><strong>\u0627\u0645\u0646\u06cc\u062a \u0686\u067e \u0686\u067e<\/strong><\/p>\n<p>\u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc \u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u062f\u0631 \u0627\u0648\u0627\u062e\u0631 \u0647\u0632\u06cc\u0646\u0647 SDLC \u06af\u0631\u0641\u062a\u0627\u0631 \u0634\u062f\u0647 \u0627\u0633\u062a <strong>6 \u0628\u0631\u0627\u0628\u0631 \u0628\u06cc\u0634\u062a\u0631<\/strong> \u0628\u0631\u0627\u06cc \u0631\u0641\u0639 \u0632\u0648\u062f\u0631\u0633. SDET \u0647\u0627 \u0628\u0627 \u0627\u062f\u063a\u0627\u0645 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u0645\u0646\u06cc\u062a\u06cc \u062f\u0631 \u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646 \u060c \u06a9\u0627\u0647\u0634 \u062e\u0637\u0631 \u0641\u0639\u0627\u0644 \u0631\u0627 \u0641\u0639\u0627\u0644 \u0645\u06cc \u06a9\u0646\u0646\u062f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0641\u0631\u0627\u062a\u0631 \u0627\u0632 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0639\u0645\u0644\u06a9\u0631\u062f\u06cc<\/strong><\/p>\n<p>SDET \u0647\u0627\u06cc \u0645\u062f\u0631\u0646 \u0646\u06af\u0647\u0628\u0627\u0646 \u0628\u0627 \u06a9\u06cc\u0641\u06cc\u062a \u0647\u0633\u062a\u0646\u062f <em>\u0648\u062a<\/em> \u0627\u0645\u0646\u06cc\u062a \u06cc\u06a9 \u0648\u06cc\u0698\u06af\u06cc \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u06a9\u0627\u0645\u0644\u0627\u064b \u06a9\u0627\u0631 \u06a9\u0646\u062f \u0627\u0645\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062d\u0633\u0627\u0633 \u0646\u0634\u062a \u06cc\u0627 \u0646\u0642\u0627\u0637 \u062a\u0632\u0631\u06cc\u0642 SQL \u0631\u0627 \u062f\u0631 \u0645\u0639\u0631\u0636 \u0646\u0645\u0627\u06cc\u0634 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0646\u0637\u0628\u0627\u0642 \u0648 \u0634\u0647\u0631\u062a<\/strong><\/p>\n<p>GDPR \u060c PCI-DSS \u0648 \u0633\u0627\u06cc\u0631 \u0645\u0642\u0631\u0631\u0627\u062a \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0633\u062e\u062a \u06af\u06cc\u0631\u06cc \u0627\u0645\u0646\u06cc\u062a \u062f\u0627\u0631\u0646\u062f. \u062a\u0633\u062a \u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u062b\u0628\u0627\u062a \u0642\u0627\u0628\u0644 \u0634\u0646\u06cc\u062f\u0646 \u0627\u0632 \u062f\u0642\u062a \u06a9\u0627\u0641\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"OWASP_ZAP_%DA%86%D8%A7%D9%82%D9%88%DB%8C_%D8%A7%D8%B1%D8%AA%D8%B4_%D8%B3%D9%88%D8%A6%DB%8C%D8%B3_%D8%A7%D9%85%D9%86%DB%8C%D8%AA%DB%8C_SDET\"><\/span>\n<p>  OWASP ZAP: \u0686\u0627\u0642\u0648\u06cc \u0627\u0631\u062a\u0634 \u0633\u0648\u0626\u06cc\u0633 \u0627\u0645\u0646\u06cc\u062a\u06cc SDET<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Zap \u0641\u0642\u0637 \u06cc\u06a9 \u0627\u0633\u06a9\u0646\u0631 \u062f\u06cc\u06af\u0631 \u0646\u06cc\u0633\u062a &#8211; <strong>\u0627\u0628\u0632\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u0647 \u0645\u062d\u0648\u0631<\/strong> \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646:<\/p>\n<ul>\n<li>\n<strong>\u0627\u0633\u06a9\u0646 \u0645\u0646\u0641\u0639\u0644<\/strong>: \u062a\u0631\u0627\u0641\u06cc\u06a9 \u0631\u0627 \u062f\u0631 \u0637\u0648\u0644 \u0622\u0632\u0645\u0627\u06cc\u0634\u0627\u062a \u0639\u0645\u0644\u06a9\u0631\u062f\u06cc \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\n<strong>\u0627\u0633\u06a9\u0646 \u0641\u0639\u0627\u0644<\/strong>: \u0634\u0628\u06cc\u0647 \u0633\u0627\u0632\u06cc \u062d\u0645\u0644\u0627\u062a (XSS \u060c SQLI \u0648 \u063a\u06cc\u0631\u0647)<\/li>\n<li>\n<strong>\u0637\u0631\u0627\u062d\u06cc \u0627\u0648\u0644<\/strong>: \u0645\u0646\u0627\u0633\u0628 \u0628\u0631\u0627\u06cc \u062e\u0637\u0648\u0637 \u0644\u0648\u0644\u0647 CI\/CD<\/li>\n<li>\n<strong>\u0642\u0627\u0628\u0644 \u062a\u0646\u0638\u06cc\u0645<\/strong>: \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0628\u0631\u0627\u06cc OAUTH \u060c GraphQL \u0648 \u0645\u0648\u0627\u0631\u062f \u062f\u06cc\u06af\u0631<\/li>\n<\/ul>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%AF%D8%BA%D8%A7%D9%85_ZAP_%D8%AF%D8%B1_%DA%86%D8%A7%D8%B1%DA%86%D9%88%D8%A8_%D8%AE%D9%88%D8%AF_%D9%85%D8%B2%D8%A7%DB%8C%D8%A7%DB%8C_%DA%A9%D9%84%DB%8C%D8%AF%DB%8C\"><\/span>\n<p>  \u0627\u062f\u063a\u0627\u0645 ZAP \u062f\u0631 \u0686\u0627\u0631\u0686\u0648\u0628 \u062e\u0648\u062f: \u0645\u0632\u0627\u06cc\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u2705 <strong>\u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646 \u0628\u062f\u0648\u0646 \u062f\u0631\u0632<\/strong><\/p>\n<p>Trigger \u0627\u0632 \u0637\u0631\u06cc\u0642 API REST ZAP \u062f\u0631 \u0637\u0648\u0644 \u0633\u0648\u0626\u06cc\u062a \u0647\u0627\u06cc \u062a\u0633\u062a \u0633\u0644\u0646\u06cc\u0648\u0645 \u0628\u0647 \u0635\u0648\u0631\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u06cc \u0627\u0633\u06a9\u0646 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u2705 <strong>\u0622\u0632\u0645\u0627\u06cc\u0634 \u0622\u06af\u0627\u0647\u0627\u0646\u0647<\/strong><\/p>\n<p>\u0627\u0632 \u062c\u0644\u0633\u0627\u062a \u0645\u0639\u062a\u0628\u0631 \u0627\u0632 \u062a\u0633\u062a \u0647\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f\u06cc \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u0627\u0633\u06a9\u0646 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u067e\u0633 \u0627\u0632 \u0644\u06af\u06cc\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u2705 <strong>CI\/CD \u062f\u0648\u0633\u062a\u0627\u0646\u0647<\/strong><\/p>\n<p>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 ZAP \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc \u0647\u0627\u06cc \u067e\u0631\u062e\u0637\u0631 \u0631\u0627 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc \u062f\u0647\u062f \u060c \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u2705 <strong>\u06af\u0632\u0627\u0631\u0634 \u0647\u0627\u06cc \u0622\u0645\u0627\u062f\u0647 \u062c\u0630\u0627\u0628<\/strong><\/p>\n<p>\u06af\u0632\u0627\u0631\u0634 \u0647\u0627\u06cc HTML\/JSON ZAP \u0631\u0627 \u0628\u0627 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u0631\u0648\u0646\u062f Allure \u0628\u0631\u0627\u06cc \u0645\u0639\u06cc\u0627\u0631\u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u062a\u0631\u06a9\u06cc\u0628 \u06a9\u0646\u06cc\u062f.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AD%D9%88%D9%87_%D8%A7%D8%AF%D8%BA%D8%A7%D9%85_ZAP_%D8%A8%D8%A7_Selenium_testng\"><\/span>\n<p>  \u0646\u062d\u0648\u0647 \u0627\u062f\u063a\u0627\u0645 ZAP \u0628\u0627 Selenium + testng<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<hr\/>\n<h3><span class=\"ez-toc-section\" id=\"%D9%86%D9%85%D8%A7%DB%8C_%DA%A9%D9%84%DB%8C_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C\"><\/span>\n<p>  \u0646\u0645\u0627\u06cc \u06a9\u0644\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li>\n<strong>ZAP Proxy Setup<\/strong>: \u0645\u0633\u06cc\u0631 \u062a\u0631\u0627\u0641\u06cc\u06a9 \u0633\u0644\u0646\u06cc\u0648\u0645 \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 ZAP \u0645\u0633\u06cc\u0631 \u062f\u0647\u06cc\u062f<\/li>\n<li>\n<strong>\u0627\u0633\u06a9\u0646 \u0645\u0646\u0641\u0639\u0644 \u062f\u0631 \u0637\u0648\u0644 \u0622\u0632\u0645\u0627\u06cc\u0634\u0627\u062a<\/strong>: \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f ZAP \u062a\u0631\u0627\u0641\u06cc\u06a9 HTTP\/S \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u06a9\u0646\u062f<\/li>\n<li>\n<strong>\u0627\u0633\u06a9\u0646 \u0641\u0639\u0627\u0644 \u067e\u0633 \u0627\u0632 \u0622\u0632\u0645\u0648\u0646<\/strong>: \u062d\u0645\u0644\u0627\u062a \u0631\u0627 \u0628\u0639\u062f \u0627\u0632 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0628\u062d\u0631\u0627\u0646\u06cc \u062a\u062d\u0631\u06cc\u06a9 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\n<strong>\u06af\u0632\u0627\u0631\u0634<\/strong>: \u0646\u062a\u0627\u06cc\u062c \u0635\u0627\u062f\u0631\u0627\u062a \u0628\u0647 Allure<\/li>\n<\/ol>\n<blockquote>\n<p>\u062a\u0648\u062c\u0647: \u062d\u0627\u0644\u062a \u0628\u062f\u0648\u0646 \u0633\u0631 \u0628\u0647 \u0645\u0631\u0627\u062d\u0644 \u0627\u0636\u0627\u0641\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f \u0648 \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0639\u0627\u062f\u06cc ZAP GUI \u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0628\u0627\u06cc\u062f \u0628\u0627\u0632 \u0634\u0648\u062f.<\/p>\n<\/blockquote>\n<hr\/>\n<h3><span class=\"ez-toc-section\" id=\"%D9%82%D8%B7%D8%B9%D9%87_%DA%A9%D8%AF_%D9%85%D8%AB%D8%A7%D9%84_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C_%D9%87%D8%A7\"><\/span>\n<p>  \u0642\u0637\u0639\u0647 \u06a9\u062f \u0645\u062b\u0627\u0644 (\u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight xml\"><code><span class=\"c\"><!-- Selenium --><\/span>\n        <span class=\"nt\"><dependency\/><\/span>\n            <span class=\"nt\"><groupid\/><\/span>org.seleniumhq.selenium<span class=\"nt\"\/>\n            <span class=\"nt\"><artifactid\/><\/span>selenium-java<span class=\"nt\"\/>\n            <span class=\"nt\"><version\/><\/span>4.30.0<span class=\"nt\"\/>\n        <span class=\"nt\"\/>\n\n<span class=\"c\"><!-- https:\/\/mvnrepository.com\/artifact\/io.cucumber\/cucumber-java --><\/span>\n        <span class=\"nt\"><dependency\/><\/span>\n            <span class=\"nt\"><groupid\/><\/span>io.cucumber<span class=\"nt\"\/>\n            <span class=\"nt\"><artifactid\/><\/span>cucumber-java<span class=\"nt\"\/>\n            <span class=\"nt\"><version\/><\/span>7.21.1<span class=\"nt\"\/>\n        <span class=\"nt\"\/>\n\n<span class=\"c\"><!-- https:\/\/mvnrepository.com\/artifact\/org.zaproxy\/zap-clientapi --><\/span>\n        <span class=\"nt\"><dependency\/><\/span>\n            <span class=\"nt\"><groupid\/><\/span>org.zaproxy<span class=\"nt\"\/>\n            <span class=\"nt\"><artifactid\/><\/span>zap-clientapi<span class=\"nt\"\/>\n            <span class=\"nt\"><version\/><\/span>1.16.0<span class=\"nt\"\/>\n        <span class=\"nt\"\/>\n\n<span class=\"c\"><!-- https:\/\/mvnrepository.com\/artifact\/org.testng\/testng --><\/span>\n        <span class=\"nt\"><dependency\/><\/span>\n            <span class=\"nt\"><groupid\/><\/span>org.testng<span class=\"nt\"\/>\n            <span class=\"nt\"><artifactid\/><\/span>testng<span class=\"nt\"\/>\n            <span class=\"nt\"><version\/><\/span>7.10.2<span class=\"nt\"\/>\n            <span class=\"nt\"><scope\/><\/span>test<span class=\"nt\"\/>\n        <span class=\"nt\"\/>\n\n<span class=\"c\"><!-- Allure --><\/span>\n        <span class=\"nt\"><dependency\/><\/span>\n            <span class=\"nt\"><groupid\/><\/span>io.qameta.allure<span class=\"nt\"\/>\n            <span class=\"nt\"><artifactid\/><\/span>allure-cucumber7-jvm<span class=\"nt\"\/>\n            <span class=\"nt\"><scope\/><\/span>test<span class=\"nt\"\/>\n        <span class=\"nt\"\/>\n\n<span class=\"c\"><!-- https:\/\/mvnrepository.com\/artifact\/io.qameta.allure\/allure-testng --><\/span>\n        <span class=\"nt\"><dependency\/><\/span>\n            <span class=\"nt\"><groupid\/><\/span>io.qameta.allure<span class=\"nt\"\/>\n            <span class=\"nt\"><artifactid\/><\/span>allure-testng<span class=\"nt\"\/>\n            <span class=\"nt\"><version\/><\/span>2.29.1<span class=\"nt\"\/>\n        <span class=\"nt\"\/>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87\"><\/span>\n<p>  \u067e\u0631\u0648\u0646\u062f\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>\nFeature: ZAP Security Check\n\n  @sec\n  Scenario: I need to run security check\n    When i started security <span class=\"nb\">test<\/span>\n\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%D9%85%D8%B1%D8%AD%D9%84%D9%87\"><\/span>\n<p>  \u062a\u0639\u0631\u06cc\u0641 \u0645\u0631\u062d\u0644\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight java\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.velespit.step_definitions<\/span><span class=\"o\">;<\/span>\n\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.velespit.utilities.BrowserUtils<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.velespit.utilities.ConfigurationReader<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">io.qameta.allure.Allure<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">io.qameta.allure.Description<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">io.qameta.allure.junit4.Tag<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.testng.annotations.Test<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.zaproxy.clientapi.core.*<\/span><span class=\"o\">;<\/span>\n\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.slf4j.Logger<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.slf4j.LoggerFactory<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.zaproxy.clientapi.core.ClientApi<\/span><span class=\"o\">;<\/span>\n\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.BufferedReader<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.InputStreamReader<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.HashMap<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.List<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.ArrayList<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.Map<\/span><span class=\"o\">;<\/span>\n\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">ZapSecurityTest<\/span> <span class=\"o\">{<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"kd\">static<\/span> <span class=\"kd\">final<\/span> <span class=\"nc\">Logger<\/span> <span class=\"n\">logger<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">LoggerFactory<\/span><span class=\"o\">.<\/span><span class=\"na\">getLogger<\/span><span class=\"o\">(<\/span><span class=\"nc\">ZapSecurityTest<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">);<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"kd\">static<\/span> <span class=\"kd\">final<\/span> <span class=\"nc\">String<\/span> <span class=\"no\">ZAP_PROXY_HOST<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"localhost\"<\/span><span class=\"o\">;<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"kd\">static<\/span> <span class=\"kd\">final<\/span> <span class=\"kt\">int<\/span> <span class=\"no\">ZAP_PROXY_PORT<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">8080<\/span><span class=\"o\">;<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"kd\">static<\/span> <span class=\"kd\">final<\/span> <span class=\"nc\">String<\/span> <span class=\"no\">ZAP_API_KEY<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">ConfigurationReader<\/span><span class=\"o\">.<\/span><span class=\"na\">getProperty<\/span><span class=\"o\">(<\/span><span class=\"s\">\"zap_api_key\"<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ Replace with your ZAP API key<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"kd\">static<\/span> <span class=\"nc\">ClientApi<\/span> <span class=\"n\">zapClient<\/span><span class=\"o\">;<\/span>\n\n    <span class=\"kd\">public<\/span> <span class=\"nf\">ZapSecurityTest<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n        <span class=\"n\">zapClient<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">ClientApi<\/span><span class=\"o\">(<\/span><span class=\"no\">ZAP_PROXY_HOST<\/span><span class=\"o\">,<\/span> <span class=\"no\">ZAP_PROXY_PORT<\/span><span class=\"o\">,<\/span> <span class=\"no\">ZAP_API_KEY<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">startZAPHeadless<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\n            <span class=\"nc\">ProcessBuilder<\/span> <span class=\"n\">processBuilder<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">ProcessBuilder<\/span><span class=\"o\">(<\/span>\n                    <span class=\"s\">\"cmd.exe\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"\/c\"<\/span><span class=\"o\">,<\/span> <span class=\"nc\">ConfigurationReader<\/span><span class=\"o\">.<\/span><span class=\"na\">getProperty<\/span><span class=\"o\">(<\/span><span class=\"s\">\"zap_path\"<\/span><span class=\"o\">),<\/span> <span class=\"s\">\"-daemon\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"-port\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"8080\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"-host\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"localhost\"<\/span>\n            <span class=\"o\">);<\/span>\n\n            <span class=\"n\">processBuilder<\/span><span class=\"o\">.<\/span><span class=\"na\">directory<\/span><span class=\"o\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">File<\/span><span class=\"o\">(<\/span><span class=\"nc\">ConfigurationReader<\/span><span class=\"o\">.<\/span><span class=\"na\">getProperty<\/span><span class=\"o\">(<\/span><span class=\"s\">\"zap_path\"<\/span><span class=\"o\">)));<\/span>\n            <span class=\"n\">processBuilder<\/span><span class=\"o\">.<\/span><span class=\"na\">redirectErrorStream<\/span><span class=\"o\">(<\/span><span class=\"kc\">true<\/span><span class=\"o\">);<\/span>\n\n            <span class=\"nc\">Process<\/span> <span class=\"n\">zapProcess<\/span> <span class=\"o\">=<\/span> <span class=\"n\">processBuilder<\/span><span class=\"o\">.<\/span><span class=\"na\">start<\/span><span class=\"o\">();<\/span>\n            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"s\">\"ZAP started in headless mode.\"<\/span><span class=\"o\">);<\/span>\n\n            <span class=\"c1\">\/\/ Wait until ZAP is fully initialized before continuing<\/span>\n            <span class=\"n\">waitForZapStartup<\/span><span class=\"o\">();<\/span>\n\n        <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"nc\">Exception<\/span> <span class=\"n\">e<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">error<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Failed to start ZAP in headless mode.\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">e<\/span><span class=\"o\">);<\/span>\n        <span class=\"o\">}<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">waitForZapStartup<\/span><span class=\"o\">()<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">InterruptedException<\/span> <span class=\"o\">{<\/span>\n        <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Waiting for ZAP to initialize...\"<\/span><span class=\"o\">);<\/span>\n\n        <span class=\"kt\">int<\/span> <span class=\"n\">retries<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">10<\/span><span class=\"o\">;<\/span>\n        <span class=\"k\">while<\/span> <span class=\"o\">(<\/span><span class=\"n\">retries<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n            <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">isZapRunning<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\n                <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"s\">\"ZAP is ready!\"<\/span><span class=\"o\">);<\/span>\n                <span class=\"k\">return<\/span><span class=\"o\">;<\/span>\n            <span class=\"o\">}<\/span>\n            <span class=\"nc\">BrowserUtils<\/span><span class=\"o\">.<\/span><span class=\"na\">sleep<\/span><span class=\"o\">(<\/span><span class=\"mi\">5<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ Wait 5 seconds<\/span>\n            <span class=\"n\">retries<\/span><span class=\"o\">--;<\/span>\n        <span class=\"o\">}<\/span>\n        <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">RuntimeException<\/span><span class=\"o\">(<\/span><span class=\"s\">\"ZAP did not start within the expected time!\"<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">boolean<\/span> <span class=\"nf\">isZapRunning<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\n            <span class=\"nc\">ProcessBuilder<\/span> <span class=\"n\">checkProcess<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">ProcessBuilder<\/span><span class=\"o\">(<\/span><span class=\"s\">\"curl\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"-s\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"http:\/\/localhost:8080\/\"<\/span><span class=\"o\">);<\/span>\n            <span class=\"nc\">Process<\/span> <span class=\"n\">process<\/span> <span class=\"o\">=<\/span> <span class=\"n\">checkProcess<\/span><span class=\"o\">.<\/span><span class=\"na\">start<\/span><span class=\"o\">();<\/span>\n            <span class=\"nc\">BufferedReader<\/span> <span class=\"n\">reader<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">BufferedReader<\/span><span class=\"o\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">InputStreamReader<\/span><span class=\"o\">(<\/span><span class=\"n\">process<\/span><span class=\"o\">.<\/span><span class=\"na\">getInputStream<\/span><span class=\"o\">()));<\/span>\n\n            <span class=\"nc\">String<\/span> <span class=\"n\">response<\/span><span class=\"o\">;<\/span>\n            <span class=\"k\">while<\/span> <span class=\"o\">((<\/span><span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">reader<\/span><span class=\"o\">.<\/span><span class=\"na\">readLine<\/span><span class=\"o\">())<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">null<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n                <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"na\">contains<\/span><span class=\"o\">(<\/span><span class=\"s\">\"ZAP\"<\/span><span class=\"o\">))<\/span> <span class=\"o\">{<\/span>\n                    <span class=\"k\">return<\/span> <span class=\"kc\">true<\/span><span class=\"o\">;<\/span>\n                <span class=\"o\">}<\/span>\n            <span class=\"o\">}<\/span>\n        <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"nc\">Exception<\/span> <span class=\"n\">e<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n            <span class=\"k\">return<\/span> <span class=\"kc\">false<\/span><span class=\"o\">;<\/span>\n        <span class=\"o\">}<\/span>\n        <span class=\"k\">return<\/span> <span class=\"kc\">false<\/span><span class=\"o\">;<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">startZapSecurityTest<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span> <span class=\"n\">targetUrl<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\n            <span class=\"c1\">\/\/ Start a new session<\/span>\n            <span class=\"n\">zapClient<\/span><span class=\"o\">.<\/span><span class=\"na\">core<\/span><span class=\"o\">.<\/span><span class=\"na\">newSession<\/span><span class=\"o\">(<\/span><span class=\"s\">\"ZAP Security Test\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"true\"<\/span><span class=\"o\">);<\/span>\n\n            <span class=\"c1\">\/\/ Spider the target URL to discover links<\/span>\n            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Starting ZAP Spider for: {}\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">targetUrl<\/span><span class=\"o\">);<\/span>\n            <span class=\"nc\">ApiResponse<\/span> <span class=\"n\">spiderResponse<\/span> <span class=\"o\">=<\/span> <span class=\"n\">zapClient<\/span><span class=\"o\">.<\/span><span class=\"na\">spider<\/span><span class=\"o\">.<\/span><span class=\"na\">scan<\/span><span class=\"o\">(<\/span><span class=\"n\">targetUrl<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">);<\/span>\n            <span class=\"nc\">String<\/span> <span class=\"n\">scanId<\/span> <span class=\"o\">=<\/span> <span class=\"o\">((<\/span><span class=\"nc\">ApiResponseElement<\/span><span class=\"o\">)<\/span> <span class=\"n\">spiderResponse<\/span><span class=\"o\">).<\/span><span class=\"na\">getValue<\/span><span class=\"o\">();<\/span>\n            <span class=\"n\">waitForSpiderToComplete<\/span><span class=\"o\">(<\/span><span class=\"n\">scanId<\/span><span class=\"o\">);<\/span>\n\n            <span class=\"c1\">\/\/ Active scan for vulnerabilities<\/span>\n            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Starting ZAP Active Scan for: {}\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">targetUrl<\/span><span class=\"o\">);<\/span>\n            <span class=\"nc\">ApiResponse<\/span> <span class=\"n\">activeScanResponse<\/span> <span class=\"o\">=<\/span> <span class=\"n\">zapClient<\/span><span class=\"o\">.<\/span><span class=\"na\">ascan<\/span><span class=\"o\">.<\/span><span class=\"na\">scan<\/span><span class=\"o\">(<\/span><span class=\"n\">targetUrl<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"true\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"false\"<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">);<\/span>\n            <span class=\"nc\">String<\/span> <span class=\"n\">activeScanId<\/span> <span class=\"o\">=<\/span> <span class=\"o\">((<\/span><span class=\"nc\">ApiResponseElement<\/span><span class=\"o\">)<\/span> <span class=\"n\">activeScanResponse<\/span><span class=\"o\">).<\/span><span class=\"na\">getValue<\/span><span class=\"o\">();<\/span>\n            <span class=\"n\">waitForActiveScanToComplete<\/span><span class=\"o\">(<\/span><span class=\"n\">activeScanId<\/span><span class=\"o\">);<\/span>\n\n            <span class=\"c1\">\/\/ Generate and report security findings<\/span>\n            <span class=\"n\">reportSecurityFindings<\/span><span class=\"o\">(<\/span><span class=\"n\">targetUrl<\/span><span class=\"o\">);<\/span>\n\n        <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"nc\">ClientApiException<\/span> <span class=\"o\">|<\/span> <span class=\"nc\">InterruptedException<\/span> <span class=\"n\">e<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">error<\/span><span class=\"o\">(<\/span><span class=\"s\">\"An error occurred during ZAP security testing: \"<\/span><span class=\"o\">,<\/span> <span class=\"n\">e<\/span><span class=\"o\">);<\/span>\n            <span class=\"nc\">Allure<\/span><span class=\"o\">.<\/span><span class=\"na\">addAttachment<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Error\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"text\/plain\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"An error occurred: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"na\">getMessage<\/span><span class=\"o\">());<\/span>\n        <span class=\"o\">}<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">waitForSpiderToComplete<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span> <span class=\"n\">scanId<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">ClientApiException<\/span><span class=\"o\">,<\/span> <span class=\"nc\">InterruptedException<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">while<\/span> <span class=\"o\">(<\/span><span class=\"kc\">true<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n            <span class=\"nc\">BrowserUtils<\/span><span class=\"o\">.<\/span><span class=\"na\">sleep<\/span><span class=\"o\">(<\/span><span class=\"mi\">2<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ Poll every 2 seconds<\/span>\n            <span class=\"nc\">ApiResponse<\/span> <span class=\"n\">spiderStatus<\/span> <span class=\"o\">=<\/span> <span class=\"n\">zapClient<\/span><span class=\"o\">.<\/span><span class=\"na\">spider<\/span><span class=\"o\">.<\/span><span class=\"na\">status<\/span><span class=\"o\">(<\/span><span class=\"n\">scanId<\/span><span class=\"o\">);<\/span>\n            <span class=\"kt\">int<\/span> <span class=\"n\">progress<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">Integer<\/span><span class=\"o\">.<\/span><span class=\"na\">parseInt<\/span><span class=\"o\">(((<\/span><span class=\"nc\">ApiResponseElement<\/span><span class=\"o\">)<\/span> <span class=\"n\">spiderStatus<\/span><span class=\"o\">).<\/span><span class=\"na\">getValue<\/span><span class=\"o\">());<\/span>\n            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"s\">\"ZAP Spider progress: {}%\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">progress<\/span><span class=\"o\">);<\/span>\n            <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">progress<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"mi\">100<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n                <span class=\"k\">break<\/span><span class=\"o\">;<\/span>\n            <span class=\"o\">}<\/span>\n        <span class=\"o\">}<\/span>\n        <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"s\">\"ZAP Spider completed.\"<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">waitForActiveScanToComplete<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span> <span class=\"n\">scanId<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">ClientApiException<\/span><span class=\"o\">,<\/span> <span class=\"nc\">InterruptedException<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">while<\/span> <span class=\"o\">(<\/span><span class=\"kc\">true<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n            <span class=\"nc\">BrowserUtils<\/span><span class=\"o\">.<\/span><span class=\"na\">sleep<\/span><span class=\"o\">(<\/span><span class=\"mi\">2<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ Poll every 2 seconds<\/span>\n            <span class=\"nc\">ApiResponse<\/span> <span class=\"n\">activeScanStatus<\/span> <span class=\"o\">=<\/span> <span class=\"n\">zapClient<\/span><span class=\"o\">.<\/span><span class=\"na\">ascan<\/span><span class=\"o\">.<\/span><span class=\"na\">status<\/span><span class=\"o\">(<\/span><span class=\"n\">scanId<\/span><span class=\"o\">);<\/span>\n            <span class=\"kt\">int<\/span> <span class=\"n\">progress<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">Integer<\/span><span class=\"o\">.<\/span><span class=\"na\">parseInt<\/span><span class=\"o\">(((<\/span><span class=\"nc\">ApiResponseElement<\/span><span class=\"o\">)<\/span> <span class=\"n\">activeScanStatus<\/span><span class=\"o\">).<\/span><span class=\"na\">getValue<\/span><span class=\"o\">());<\/span>\n            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"s\">\"ZAP Active Scan progress: {}%\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">progress<\/span><span class=\"o\">);<\/span>\n            <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">progress<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"mi\">100<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n                <span class=\"k\">break<\/span><span class=\"o\">;<\/span>\n            <span class=\"o\">}<\/span>\n        <span class=\"o\">}<\/span>\n        <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"s\">\"ZAP Active Scan completed.\"<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">reportSecurityFindings<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span> <span class=\"n\">targetUrl<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">ClientApiException<\/span> <span class=\"o\">{<\/span>\n        <span class=\"c1\">\/\/ Get alerts (vulnerabilities) using the new API method<\/span>\n        <span class=\"nc\">ApiResponse<\/span> <span class=\"n\">alertsResponse<\/span> <span class=\"o\">=<\/span> <span class=\"n\">zapClient<\/span><span class=\"o\">.<\/span><span class=\"na\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">alerts<\/span><span class=\"o\">(<\/span><span class=\"n\">targetUrl<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">);<\/span>\n        <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">Map<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"o\">,<\/span> <span class=\"nc\">String<\/span><span class=\"o\">&gt;&gt;<\/span> <span class=\"n\">alerts<\/span> <span class=\"o\">=<\/span> <span class=\"n\">parseAlerts<\/span><span class=\"o\">((<\/span><span class=\"nc\">ApiResponseList<\/span><span class=\"o\">)<\/span> <span class=\"n\">alertsResponse<\/span><span class=\"o\">);<\/span>\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">alerts<\/span><span class=\"o\">.<\/span><span class=\"na\">isEmpty<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\n            <span class=\"nc\">Allure<\/span><span class=\"o\">.<\/span><span class=\"na\">addAttachment<\/span><span class=\"o\">(<\/span><span class=\"s\">\"ZAP Security Result\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"text\/plain\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"No security issues found for: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">targetUrl<\/span><span class=\"o\">);<\/span>\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\n            <span class=\"nc\">Allure<\/span><span class=\"o\">.<\/span><span class=\"na\">addAttachment<\/span><span class=\"o\">(<\/span><span class=\"s\">\"ZAP Security Result\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"text\/plain\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"Security Issues Found for: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">targetUrl<\/span><span class=\"o\">);<\/span>\n            <span class=\"k\">for<\/span> <span class=\"o\">(<\/span><span class=\"nc\">Map<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"o\">,<\/span> <span class=\"nc\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">alert<\/span> <span class=\"o\">:<\/span> <span class=\"n\">alerts<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n                <span class=\"nc\">String<\/span> <span class=\"n\">alertDetails<\/span> <span class=\"o\">=<\/span> <span class=\"n\">formatAlertDetails<\/span><span class=\"o\">(<\/span><span class=\"n\">alert<\/span><span class=\"o\">);<\/span>\n\n                <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">alertDetails<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">null<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n                    <span class=\"nc\">Allure<\/span><span class=\"o\">.<\/span><span class=\"na\">addAttachment<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Alert: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"alert\"<\/span><span class=\"o\">),<\/span> <span class=\"s\">\"text\/plain\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">alertDetails<\/span><span class=\"o\">);<\/span>\n                <span class=\"o\">}<\/span>\n            <span class=\"o\">}<\/span>\n        <span class=\"o\">}<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">Map<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"o\">,<\/span> <span class=\"nc\">String<\/span><span class=\"o\">&gt;&gt;<\/span> <span class=\"nf\">parseAlerts<\/span><span class=\"o\">(<\/span><span class=\"nc\">ApiResponseList<\/span> <span class=\"n\">alertsResponse<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">Map<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"o\">,<\/span> <span class=\"nc\">String<\/span><span class=\"o\">&gt;&gt;<\/span> <span class=\"n\">alerts<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">ArrayList<\/span><span class=\"o\">&lt;&gt;();<\/span>\n\n        <span class=\"k\">for<\/span> <span class=\"o\">(<\/span><span class=\"nc\">ApiResponse<\/span> <span class=\"n\">response<\/span> <span class=\"o\">:<\/span> <span class=\"n\">alertsResponse<\/span><span class=\"o\">.<\/span><span class=\"na\">getItems<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\n            <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">response<\/span> <span class=\"k\">instanceof<\/span> <span class=\"nc\">ApiResponseSet<\/span> <span class=\"n\">alertSet<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n                <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">alertSet<\/span><span class=\"o\">.<\/span><span class=\"na\">getValuesMap<\/span><span class=\"o\">()<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">null<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"o\">!<\/span><span class=\"n\">alertSet<\/span><span class=\"o\">.<\/span><span class=\"na\">getValuesMap<\/span><span class=\"o\">().<\/span><span class=\"na\">isEmpty<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\n                    <span class=\"nc\">Map<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"o\">,<\/span> <span class=\"nc\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">alertDetails<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">HashMap<\/span><span class=\"o\">&lt;&gt;();<\/span>\n\n                    <span class=\"k\">for<\/span> <span class=\"o\">(<\/span><span class=\"nc\">Map<\/span><span class=\"o\">.<\/span><span class=\"na\">Entry<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"o\">,<\/span> <span class=\"nc\">ApiResponse<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">entry<\/span> <span class=\"o\">:<\/span> <span class=\"n\">alertSet<\/span><span class=\"o\">.<\/span><span class=\"na\">getValuesMap<\/span><span class=\"o\">().<\/span><span class=\"na\">entrySet<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\n                        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">entry<\/span><span class=\"o\">.<\/span><span class=\"na\">getValue<\/span><span class=\"o\">()<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">null<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n                            <span class=\"n\">alertDetails<\/span><span class=\"o\">.<\/span><span class=\"na\">put<\/span><span class=\"o\">(<\/span><span class=\"n\">entry<\/span><span class=\"o\">.<\/span><span class=\"na\">getKey<\/span><span class=\"o\">(),<\/span> <span class=\"n\">entry<\/span><span class=\"o\">.<\/span><span class=\"na\">getValue<\/span><span class=\"o\">().<\/span><span class=\"na\">toString<\/span><span class=\"o\">());<\/span>\n                        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\n                            <span class=\"n\">alertDetails<\/span><span class=\"o\">.<\/span><span class=\"na\">put<\/span><span class=\"o\">(<\/span><span class=\"n\">entry<\/span><span class=\"o\">.<\/span><span class=\"na\">getKey<\/span><span class=\"o\">(),<\/span> <span class=\"s\">\"null\"<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ null kontrol\u00fc<\/span>\n                        <span class=\"o\">}<\/span>\n                    <span class=\"o\">}<\/span>\n                    <span class=\"n\">alerts<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"n\">alertDetails<\/span><span class=\"o\">);<\/span>\n                <span class=\"o\">}<\/span>\n            <span class=\"o\">}<\/span>\n        <span class=\"o\">}<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">alerts<\/span><span class=\"o\">;<\/span>\n    <span class=\"o\">}<\/span>\n\n\n    <span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">formatAlertDetails<\/span><span class=\"o\">(<\/span><span class=\"nc\">Map<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"o\">,<\/span> <span class=\"nc\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">alert<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">alert<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">null<\/span> <span class=\"o\">||<\/span> <span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">isEmpty<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\n            <span class=\"k\">return<\/span> <span class=\"kc\">null<\/span><span class=\"o\">;<\/span> <span class=\"c1\">\/\/ Return null if map is empty or null<\/span>\n        <span class=\"o\">}<\/span>\n\n        <span class=\"nc\">String<\/span> <span class=\"n\">risk<\/span> <span class=\"o\">=<\/span> <span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"risk\"<\/span><span class=\"o\">);<\/span>\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">risk<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">null<\/span> <span class=\"o\">||<\/span> <span class=\"n\">risk<\/span><span class=\"o\">.<\/span><span class=\"na\">equals<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Low\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">||<\/span> <span class=\"n\">risk<\/span><span class=\"o\">.<\/span><span class=\"na\">equals<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Informational\"<\/span><span class=\"o\">))<\/span> <span class=\"o\">{<\/span>\n            <span class=\"k\">return<\/span> <span class=\"kc\">null<\/span><span class=\"o\">;<\/span> <span class=\"c1\">\/\/ Return null if low or informational risk<\/span>\n        <span class=\"o\">}<\/span>\n\n        <span class=\"c1\">\/\/ Check if necessary alert keys are available<\/span>\n        <span class=\"k\">if<\/span> <span class=\"o\">(!<\/span><span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">containsKey<\/span><span class=\"o\">(<\/span><span class=\"s\">\"alert\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">||<\/span> <span class=\"o\">!<\/span><span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">containsKey<\/span><span class=\"o\">(<\/span><span class=\"s\">\"confidence\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">||<\/span>\n                <span class=\"o\">!<\/span><span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">containsKey<\/span><span class=\"o\">(<\/span><span class=\"s\">\"description\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">||<\/span> <span class=\"o\">!<\/span><span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">containsKey<\/span><span class=\"o\">(<\/span><span class=\"s\">\"solution\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">||<\/span>\n                <span class=\"o\">!<\/span><span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">containsKey<\/span><span class=\"o\">(<\/span><span class=\"s\">\"reference\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">||<\/span> <span class=\"o\">!<\/span><span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">containsKey<\/span><span class=\"o\">(<\/span><span class=\"s\">\"url\"<\/span><span class=\"o\">))<\/span> <span class=\"o\">{<\/span>\n            <span class=\"k\">return<\/span> <span class=\"s\">\"Missing required alert details.\"<\/span><span class=\"o\">;<\/span> <span class=\"c1\">\/\/ Return error message if missing information<\/span>\n        <span class=\"o\">}<\/span>\n\n        <span class=\"k\">return<\/span> <span class=\"s\">\"Alert: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"alert\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\"\\n\"<\/span> <span class=\"o\">+<\/span>\n                <span class=\"s\">\"Risk: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">risk<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\"\\n\"<\/span> <span class=\"o\">+<\/span>\n                <span class=\"s\">\"Confidence: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"confidence\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\"\\n\"<\/span> <span class=\"o\">+<\/span>\n                <span class=\"s\">\"Description: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"description\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\"\\n\"<\/span> <span class=\"o\">+<\/span>\n                <span class=\"s\">\"Solution: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"solution\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\"\\n\"<\/span> <span class=\"o\">+<\/span>\n                <span class=\"s\">\"Reference: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"reference\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\"\\n\"<\/span> <span class=\"o\">+<\/span>\n                <span class=\"s\">\"URL: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">alert<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"url\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\"\\n\"<\/span> <span class=\"o\">+<\/span>\n                <span class=\"s\">\"--------------------\"<\/span><span class=\"o\">;<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">shutDownZAP<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n        <span class=\"c1\">\/\/ Shutdown ZAP after testing<\/span>\n        <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\n            <span class=\"n\">zapClient<\/span><span class=\"o\">.<\/span><span class=\"na\">core<\/span><span class=\"o\">.<\/span><span class=\"na\">shutdown<\/span><span class=\"o\">();<\/span>\n            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"s\">\"ZAP has been shut down.\"<\/span><span class=\"o\">);<\/span>\n        <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"nc\">ClientApiException<\/span> <span class=\"n\">e<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">error<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Failed to shutdown ZAP.\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">e<\/span><span class=\"o\">);<\/span>\n        <span class=\"o\">}<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"nd\">@Tag<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Security\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"nd\">@Description<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Security Test with ZAP API using TestNG\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"nd\">@Test<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">secTest<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n\n        <span class=\"n\">startZAPHeadless<\/span><span class=\"o\">();<\/span>\n\n        <span class=\"n\">startZapSecurityTest<\/span><span class=\"o\">(<\/span><span class=\"s\">\"https:\/\/yusufasik.com\"<\/span><span class=\"o\">);<\/span>\n\n        <span class=\"n\">shutDownZAP<\/span><span class=\"o\">();<\/span>\n\n    <span class=\"o\">}<\/span>\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%D8%A7%D9%84%D8%B4_%D9%87%D8%A7_%D9%88_%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86_%D8%B4%DB%8C%D9%88%D9%87_%D9%87%D8%A7\"><\/span>\n<p>  \u0686\u0627\u0644\u0634 \u0647\u0627 \u0648 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0634\u06cc\u0648\u0647 \u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u26a0 <strong>\u0645\u0634\u06a9\u0644\u0627\u062a \u0645\u0634\u062a\u0631\u06a9<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0645\u062b\u0628\u062a \u06a9\u0627\u0630\u0628<\/strong>: \u0647\u0645\u06cc\u0634\u0647 \u0646\u062a\u0627\u06cc\u062c \u0633\u0647 \u06af\u0627\u0646\u0647<\/p>\n<\/li>\n<li>\n<p><strong>\u0639\u0645\u0644<\/strong>: \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0633\u06a9\u0646 \u0647\u0627\u06cc \u062a\u0647\u0627\u062c\u0645\u06cc \u0631\u0627 \u0627\u0632 \u0627\u0648\u062c \u062e\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u06cc\u0632\u06cc \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p><strong>\u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062c\u0644\u0633\u0647<\/strong>: \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0627\u0632 \u0632\u0645\u06cc\u0646\u0647 \u0647\u0627\u06cc \u0645\u0639\u062a\u0628\u0631<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<p>\ud83d\udd11 <strong>\u0646\u06a9\u0627\u062a \u0637\u0631\u0641\u062f\u0627\u0631<\/strong><\/p>\n<ol>\n<li>\n<p>\u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u067e\u0648\u0633\u062a\u0647 \u067e\u0648\u0633\u062a\u0647 \u0634\u062f\u0646 \u0628\u0627 \u0627\u0633\u06a9\u0646 \u0645\u0646\u0641\u0639\u0644 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u0628\u0631\u0627\u06cc \u0641\u06cc\u0644\u062a\u0631 \u06a9\u0631\u062f\u0646 \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc \u0647\u0627\u06cc \u0628\u06cc \u0631\u0628\u0637 \u0627\u0632 Zap&#39;s tags \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <em>(\u06cc\u0627 \u0628\u06cc\u0627\u0646\u06cc\u0647 \u0645\u0646 \u0627\u06af\u0631 \u0646\u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0628\u0627 \u0622\u0646 \u0645\u0642\u0627\u0628\u0644\u0647 \u06a9\u0646\u06cc\u062f)<\/em><\/p>\n<\/li>\n<li>\n<p>ZAP Weekly \u0631\u0627 \u0628\u0647 \u0631\u0648\u0632 \u06a9\u0646\u06cc\u062f &#8211; \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0628\u0647 \u0637\u0648\u0631 \u0645\u062f\u0627\u0648\u0645 \u0638\u0647\u0648\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f<\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%DA%AF%DB%8C%D8%B1%DB%8C_%D8%A7%D9%85%D9%86%DB%8C%D8%AA_%D8%A7%D8%B3%D8%AA_%D8%B4%D9%85%D8%A7_%D9%85%D8%B3%D8%A6%D9%88%D9%84%DB%8C%D8%AA_%D8%A7%DA%A9%D9%86%D9%88%D9%86\"><\/span>\n<p>  \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc: \u0627\u0645\u0646\u06cc\u062a \u0627\u0633\u062a <em>\u0634\u0645\u0627<\/em> \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0627\u06a9\u0646\u0648\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>SDET \u0647\u0627 \u0645\u0646\u062d\u0635\u0631 \u0628\u0647 \u0641\u0631\u062f \u0628\u0631\u0627\u06cc \u062f\u0645\u0648\u06a9\u0631\u0627\u062a\u06cc\u06a9 \u06a9\u0631\u062f\u0646 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0646\u062f. \u0628\u0627 \u062a\u0639\u0628\u06cc\u0647 ZAP \u062f\u0631 \u0686\u0627\u0631\u0686\u0648\u0628 \u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646 \u062e\u0648\u062f \u060c \u0634\u0645\u0627:<\/p>\n<ul>\n<li>\n<p>\u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc \u0647\u0627 \u0631\u0627 \u0628\u06af\u06cc\u0631\u06cc\u062f <strong>\u0642\u0628\u0644 \u0627\u0632 \u0631\u0633\u06cc\u062f\u0646 \u0628\u0647 \u062a\u0648\u0644\u06cc\u062f<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0627\u0645\u0646\u06cc\u062a \u0631\u0627 \u062f\u0631 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0631\u0648\u0632\u0627\u0646\u0647 \u062a\u06cc\u0645 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u0646\u0642\u0634 \u062e\u0648\u062f \u0631\u0627 \u0627\u0632 \u0646\u0648\u06cc\u0633\u0646\u062f\u0647 \u062a\u0633\u062a \u0628\u0647 \u0645\u0639\u0645\u0627\u0631 \u0628\u0627 \u06a9\u06cc\u0641\u06cc\u062a \u0628\u0627\u0644\u0627 \u0628\u0628\u0631\u06cc\u062f<\/p>\n<\/li>\n<\/ul>\n<p><em>\u0622\u0645\u0627\u062f\u0647 \u0627\u0645\u062a\u062d\u0627\u0646 \u0622\u0646 \u0647\u0633\u062a\u06cc\u062f\u061f<\/em> \u0633\u0648\u0627\u0644\u0627\u062a ZAP \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u0632\u06cc\u0631 \u0631\u0647\u0627 \u06a9\u0646\u06cc\u062f \u06cc\u0627 \u0646\u062d\u0648\u0647 \u062a\u0633\u062a \u0627\u0645\u0646\u06cc\u062a\u06cc \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0631\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0628\u06af\u0630\u0627\u0631\u06cc\u062f! \ud83d\udc47<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u0647\u0646\u062f\u0633\u06cc\u0646 \u062a\u0648\u0633\u0639\u0647 \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631 \u062f\u0631 \u062a\u0633\u062a (SDETS) \u060c \u0645\u0627 \u0628\u0631\u0627\u06cc \u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646 \u063a\u0631\u06cc\u0628\u0647 \u0646\u06cc\u0633\u062a\u06cc\u0645. \u0645\u0627 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u060c \u0639\u0645\u0644\u06a9\u0631\u062f \u0648 \u0642\u0627\u0628\u0644\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0633\u0627\u0632\u06cc\u0645. \u0627\u0645\u0627 \u062f\u0631 \u0686\u0634\u0645 \u0627\u0646\u062f\u0627\u0632 \u062a\u0647\u062f\u06cc\u062f \u0627\u0645\u0631\u0648\u0632 \u060c \u062a\u0633\u062a \u0627\u0645\u0646\u06cc\u062a\u06cc \u062f\u06cc\u06af\u0631 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u06cc\u06a9 \u0646\u062a\u06cc\u062c\u0647 \u0628\u0627\u0634\u062f &#8211; \u0648 \u0627\u06cc\u0646 \u062c\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 OWASP ZAP (Zed Attack &hellip;<\/p>\n","protected":false},"author":2,"featured_media":102977,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-102976","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/102976","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=102976"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/102976\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/102977"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=102976"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=102976"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=102976"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}