{"id":202648,"date":"2026-11-05T05:23:00","date_gmt":"2026-11-05T10:23:00","guid":{"rendered":"https:\/\/innowise.com\/?p=202648"},"modified":"2026-11-05T06:13:43","modified_gmt":"2026-11-05T11:13:43","slug":"php-vulnerabilities-guide","status":"publish","type":"post","link":"https:\/\/innowise.com\/de\/blog\/php-vulnerabilities-guide\/","title":{"rendered":"PHP-Sicherheitscheckliste: 8 Schritte zum Aufsp\u00fcren und Beheben von Sicherheitsl\u00fccken"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"202648\" class=\"elementor elementor-202648\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0390840 main-block e-flex e-con-boxed e-con e-parent\" data-id=\"0390840\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-cfe6a78 e-con-full e-flex e-con e-child\" data-id=\"cfe6a78\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1a8a692 elementor-widget-tablet__width-inherit elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"1a8a692\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">PHP security checklist: 8 steps to find and fix vulnerabilities<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8ac61e8 elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"8ac61e8\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n    .main-block .blog-article-info {\n  color: #ffffff;\n  font-weight: 400;\n  font-size: 20px;\n  line-height: 150%;\n  font-family: \"Karla\", Sans-serif;\n\n  display: flex;\n  column-gap: 80px;\n  row-gap: 20px;\n\n  flex-wrap: wrap;\n}\n\n.main-block .blog-article-info_other {\n  display: flex;\n  column-gap: 80px;\n  row-gap: 20px;\n}\n\n\n.main-block .blog-article-info>a {\n  color: inherit;\n  transition: color .3s ease-in;\n}\n\n.main-block .blog-article-info>a:hover {\n  color: #C63031;\n}\n\n@media screen and (max-width: 767px) {\n  .main-block .blog-article-info_other {\n    display: flex;\n    column-gap: 40px;\n    row-gap: 20px;\n  }\n\n  .main-block .blog-article-info>a,\n  .main-block .blog-article-info>span {\n    width: 100%;\n  }\n\n  .main-block .blog-article-info {\n    color: #ffffff;\n    font-size: 16px;\n  }\n}\n\n.author-container a{\ntext-decoration: none;\n}\n\n<\/style>\n<div class=\"blog-article-info\">\n   \n    <div class=\"blog-article-info_other\">\n        <span>Nov 5, 2026<\/span>\n        <span>19 min read<\/span>\n    <\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ef47379 elementor-hidden-desktop elementor-hidden-tablet e-flex e-con-boxed e-con e-parent\" data-id=\"ef47379\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-40daf9a elementor-widget__width-inherit elementor-widget elementor-widget-image\" data-id=\"40daf9a\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"439\" height=\"330\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/11\/1-380493862.png\" class=\"attachment-large size-large wp-image-202650\" alt=\"php icon.\" srcset=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/11\/1-380493862.png 439w, https:\/\/innowise.com\/wp-content\/uploads\/2026\/11\/1-380493862-300x226.png 300w, https:\/\/innowise.com\/wp-content\/uploads\/2026\/11\/1-380493862-16x12.png 16w\" sizes=\"(max-width: 439px) 100vw, 439px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-82ba05c article-description elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"82ba05c\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-3d75ad5 author-article\" data-id=\"3d75ad5\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-29009ba elementor-widget__width-inherit elementor-widget elementor-widget-shortcode\" data-id=\"29009ba\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"expert_card-container\">\n        <div class=\"expert_card-top\">\n            <div class=\"expert_card-top-img\">\n                                    <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/07\/Frame-2131329328-2.jpg\" alt=\"Herman Samolazov, Head of Engineering..\">\n                                                <a href=\"https:\/\/www.linkedin.com\/in\/herman-samolazov-a64359197\/\" class=\"expert_card-top-img-link\" target=\"_blank\" rel=\"noopener noreferrer\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\n                        <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#E8E8E8\"\/>\n                        <path d=\"M10.0002 12.8001C10.0002 11.4802 10.0002 10.8202 10.4102 10.4102C10.8203 10.0001 11.4802 10.0001 12.8002 10.0001H27.2002C28.5201 10.0001 29.1801 10.0001 29.5901 10.4102C30.0002 10.8202 30.0002 11.4802 30.0002 12.8001V27.2001C30.0002 28.52 30.0002 29.18 29.5901 29.5901C29.1801 30.0001 28.5201 30.0001 27.2002 30.0001H12.8002C11.4802 30.0001 10.8203 30.0001 10.4102 29.5901C10.0002 29.18 10.0002 28.52 10.0002 27.2001V12.8001Z\" fill=\"white\"\/>\n                        <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M28.6112 10C29.3782 10 30.0001 10.6218 30.0001 11.3889V28.6111C30.0001 29.3782 29.3782 30 28.6112 30H11.3889C10.6219 30 10.0001 29.3782 10.0001 28.6111V11.3889C10.0001 10.6218 10.6219 10 11.3889 10H28.6112ZM13.0591 26.9444H15.9842V17.5H13.0591V26.9444ZM23.507 17.2114C21.5029 17.2114 20.6595 18.7722 20.6595 18.7722V17.5H17.8543V26.9444H20.6595V21.9868C20.6595 20.6584 21.2709 19.868 22.4412 19.8679C23.5171 19.8679 24.0338 20.6275 24.0338 21.9868V26.9444H26.9445V20.9649C26.9445 18.4349 25.5103 17.2114 23.507 17.2114ZM14.5077 12.7778C13.5522 12.7778 12.7778 13.5583 12.7778 14.5207C12.7779 15.483 13.5522 16.2633 14.5077 16.2633C15.4631 16.2632 16.237 15.483 16.237 14.5207C16.237 13.5583 15.4632 12.7778 14.5077 12.7778Z\" fill=\"#2867B2\"\/>\n                    <\/svg>\n                <\/a>\n                            <\/div>\n            <div class=\"expert_card-top-right\">\n                <div class=\"expert_card-top-name\">\n                    By <a href=\"https:\/\/innowise.com\/de\/authors\/herman-samolazov\/\">Herman Samolazov<\/a>\n                <\/div>\n                                <div class=\"expert_card-top-position\">\n                    Head of Engineering                <\/div>\n                                <div class=\"expert_card-top-right-bottom desc\">\n                    <div class=\"expert_card-top-ver\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"><path d=\"M17.486 9.00039L15.6037 6.8481L15.866 4.00153L13.0811 3.36896L11.6231 0.900391L9.00024 2.02668L6.37738 0.900391L4.91938 3.36125L2.13453 3.9861L2.39681 6.84039L0.514526 9.00039L2.39681 11.1527L2.13453 14.007L4.91938 14.6395L6.37738 17.1004L9.00024 15.9664L11.6231 17.0927L13.0811 14.6318L15.866 13.9992L15.6037 11.1527L17.486 9.00039Z\" fill=\"#717171\"\/><path d=\"M12.2783 7.55371L8.10059 11.7324L5.72168 9.35352L6.42871 8.64648L8.09961 10.3174L11.5713 6.84668L12.2783 7.55371Z\" fill=\"white\"\/><\/svg>                        Verified expert\n                        <div class=\"expert_card-top-ver-text\">\n                            Every article at Innowise is created by authors with real-world experience. They understand the topic beyond theory and bring insight from real projects.\n                            <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"16\" height=\"8\" viewBox=\"0 0 16 8\" fill=\"none\">\n                                <path d=\"M8 8L16 0L6.99382e-07 -1.39876e-06L8 8Z\" fill=\"#717171\"\/>\n                            <\/svg>\n                        <\/div>\n                    <\/div>\n                    \n                                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"3\" height=\"3\" viewBox=\"0 0 3 3\" fill=\"none\"><path d=\"M1.5 0C2.32843 0 3 0.671573 3 1.5C3 2.32843 2.32843 3 1.5 3C0.671573 3 0 2.32843 0 1.5C0 0.671573 0.671573 0 1.5 0Z\" fill=\"#717171\"\/><\/svg>                    <div class=\"expert_card-top-year\">\n                        7+ years of experience                    <\/div>\n                                    <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"expert_card-top-right-bottom mob\">\n            <div class=\"expert_card-top-ver\">\n                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"><path d=\"M17.486 9.00039L15.6037 6.8481L15.866 4.00153L13.0811 3.36896L11.6231 0.900391L9.00024 2.02668L6.37738 0.900391L4.91938 3.36125L2.13453 3.9861L2.39681 6.84039L0.514526 9.00039L2.39681 11.1527L2.13453 14.007L4.91938 14.6395L6.37738 17.1004L9.00024 15.9664L11.6231 17.0927L13.0811 14.6318L15.866 13.9992L15.6037 11.1527L17.486 9.00039Z\" fill=\"#717171\"\/><path d=\"M12.2783 7.55371L8.10059 11.7324L5.72168 9.35352L6.42871 8.64648L8.09961 10.3174L11.5713 6.84668L12.2783 7.55371Z\" fill=\"white\"\/><\/svg>                Verified expert\n                \n            <\/div>\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"3\" height=\"3\" viewBox=\"0 0 3 3\" fill=\"none\"><path d=\"M1.5 0C2.32843 0 3 0.671573 3 1.5C3 2.32843 2.32843 3 1.5 3C0.671573 3 0 2.32843 0 1.5C0 0.671573 0.671573 0 1.5 0Z\" fill=\"#717171\"\/><\/svg>            <div class=\"expert_card-top-year\">\n                7+ years of experience            <\/div>\n                    <\/div>\n                <div class=\"expert_card-text\">\n            Herman leads engineering departments and builds the processes, team structures, and technical standards they need to scale. His expertise covers high-load backend systems, delivery management, and engineering leadership.        <\/div>\n                <div class=\"expert_card-bottom\">\n\t\t\t<div class=\"expert_card-bottom-col\">\n\t\t\t\t\t\t\t\t<div class=\"expert_card-bottom-expertise\">\n\t\t\t\t\t<div class=\"expert_card-bottom-expertise-title\">\n\t\t\t\t\t\tExpertise\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"expert_card-bottom-expertise-list\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tHigh-load systems\t\t\t\t\t\t\t\t\t\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"3\" height=\"3\" viewBox=\"0 0 3 3\" fill=\"none\"><path d=\"M1.5 0C2.32843 0 3 0.671573 3 1.5C3 2.32843 2.32843 3 1.5 3C0.671573 3 0 2.32843 0 1.5C0 0.671573 0.671573 0 1.5 0Z\" fill=\"#717171\"\/><\/svg>\t\t\t\t\t\t\tSoftware architecture\t\t\t\t\t\t\t\t\t\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"3\" height=\"3\" viewBox=\"0 0 3 3\" fill=\"none\"><path d=\"M1.5 0C2.32843 0 3 0.671573 3 1.5C3 2.32843 2.32843 3 1.5 3C0.671573 3 0 2.32843 0 1.5C0 0.671573 0.671573 0 1.5 0Z\" fill=\"#717171\"\/><\/svg>\t\t\t\t\t\t\tDatabases\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"expert_card-bottom-featured\">\n\t\t\t\t\t<div class=\"expert_card-bottom-expertise-title\">\n\t\t\t\t\t\tFeatured in\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"expert_card-bottom-featured-imgs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/09\/Medium.svg\" alt=\"Medium logo.\">\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n            <a href=\"#contact-form\" class=\"expert_card-bottom-a\">\n                Let's talk\n            <\/a>\n        <\/div>\n    <\/div>\n\n    <style>\n        .expert_card-container{\n            max-width:1000px;\n            width:100%;\n            padding:40px 60px;\n            background: #F6FAFE;\n            border: 1px solid #9CC6ED;\n        }\n        .expert_card-top{\n            display:flex;\n            gap:30px;\n            align-items:center;\n            margin-bottom:24px;\n        }\n        .expert_card-top-img{\n            position:relative;\n        }\n        .expert_card-top-img img{\n            display:block;\n            width:130px;\n            border-radius:100%;\n\n        }\n        .expert_card-top-img-link{\n            position:absolute;\n            bottom:0;\n            right:0;\n            cursor:pointer;\n\t\t\twidth:40px;\n\t\t\theight:40px;\n        }\n        .expert_card-top-img-link svg *{\n            transition:0.5s;\n        }\n        .expert_card-top-img-link:hover svg rect{\n            fill:#E8E8E8;\n        }\n        .expert_card-top-img-link:hover svg path:last-child{\n            fill:#5385c1;\n        }\n        .expert_card-top-img-link:active svg rect{\n            fill:#E8E8E8;\n        }\n        .expert_card-top-right{\n\n        }\n        .expert_card-top-name{\n            font-family: Sora;\n            font-weight: 400;\n            font-size: 24px;\n            line-height: 135%;\n            margin-bottom:8px;\n            color:#2E2E2E;\n        }\n        .expert_card-top-name a{\n            font-weight:600;\n            transition:0.5s;\n            text-decoration:none;\n        }\n        .expert_card-top-name a:hover{\n            color:#C63031;\n            text-decoration:underline;\n        }\n        .expert_card-top-name a:active{\n            color:#D13B3B;\n            text-decoration:underline;\n        }\n        .expert_card-top-position{\n            font-family: Karla;\n            font-weight: 500;\n            font-size: 18px;\n            line-height: 150%;\n            margin-bottom:8px;\n            color:#2E2E2E;\n        }\n        .expert_card-top-right-bottom{\n            display:flex;\n            align-items:center;\n            gap:10px;\n        }\n        .expert_card-top-ver{\n            display:flex;\n            align-items:center;\n            gap:6px;\n            font-weight: 600;\n            font-size: 18px;\n\t\t\tfont-family: Karla;\n            line-height: 150%;\n            position:relative;\n            cursor:pointer;\n\t\t\tcolor: #717171;\n        }\n        .expert_card-top-ver-text{\n            position:absolute;\n            left:0;\n            bottom:100%;\n            max-width:300px;\n            width:300px;\n            padding:16px;\n            background: #717171;\n            font-family: Karla;\n            font-weight: 400;\n            font-size: 14px;\n            line-height: 135%;\n            color:white;\n            display:none;\n        }\n        .expert_card-top-ver-text svg{\n            left:36px;\n            position:absolute;\n            bottom:-7px;\n        }\n        .expert_card-top-ver:hover .expert_card-top-ver-text{\n            display:block;\n        }\n        .expert_card-top-ver *{\n            transition:0.5s;\n        }\n        .expert_card-top-ver svg{\n\n        }\n        \/* .expert_card-top-ver:hover{\n            color:#C63031;\n        }\n        .expert_card-top-ver:hover svg path:first-child{\n            fill:#C63031;\n        }\n        .expert_card-top-ver:active{\n            color:#D13B3B;\n        }\n        .expert_card-top-ver:active svg path:first-child{\n            fill:#D13B3B;\n        } *\/\n        .expert_card-top-year{\n            font-family: Karla;\n            font-weight: 400;\n            font-size: 18px;\n            line-height: 150%;\n            color:#717171;\n        }\n        .expert_card-text{\n            font-family: Karla;\n            font-weight: 400;\n            font-size: 18px;\n            line-height: 150%;\n            margin-bottom:24px;\n        }\n        .expert_card-bottom{\n            display:flex;\n            align-items:flex-end;\n            justify-content:space-between;\n            gap:40px;\n        }\n\t\t.expert_card-bottom-col{\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-columns: repeat(2, 1fr);\n\t\t\tgap: 30px;\n\t\t\twidth:100%;\n\t\t}\n        .expert_card-bottom-expertise{\n\n        }\n        .expert_card-bottom-expertise-title{\n            font-family: Karla;\n            font-weight: 600;\n            font-size: 16px;\n            line-height: 130%;\n            letter-spacing: 0.05em;\n            text-transform: uppercase;\n            color:#717171;\n            margin-bottom:10px;\n        }\n        .expert_card-bottom-expertise-list{\n            display:flex;\n            align-items:center;\n            gap:10px;\n            font-family: Karla;\n            font-weight: 400;\n            font-size: 18px;\n            line-height: 150%;\n            letter-spacing: 0%;\n            color:#2E2E2E;\n            flex-wrap:wrap;\n\t\t\trow-gap:0;\n        }\n        .expert_card-bottom-expertise-list svg{\n\n        }\n        .expert_card-bottom-featured-imgs{\n            display:flex;\n            gap:24px;\n\t\t\tfilter: grayscale(100%);\n        }\n        .expert_card-bottom-featured-imgs img{\n            display:block;\n            height:30px;\n            width:auto;\n        }\n        .expert_card-bottom-a{\n            font-family: Karla;\n            font-weight: 700;\n            font-size: 18px;\n            line-height: 130%;\n            color:#2E2E2E;\n            padding-bottom:2px;\n            border-bottom: 1px solid #2E2E2E;\n            transition:0.5s;\n            text-decoration:none!important;\n\t\t\ttext-wrap: nowrap;\n        }\n        .expert_card-bottom-a:hover{\n            color:#C63031;\n            border-bottom: 1px solid #C63031;\n        }\n        .expert_card-bottom-a:hover{\n            color:#D13B3B;\n            border-bottom: 1px solid #D13B3B;\n        }\n        .expert_card-top-right-bottom.mob{\n            display:none;\n        }\n\n\t\t@media(max-width:1024px){\n\t\t\t.expert_card-container{\n\t\t\t\tpadding:40px;\n\t\t\t}\n\t\t}\n\n        @media(max-width:767px){\n            .expert_card-container{\n                padding:24px 20px;\n            }\n            .expert_card-top{\n                gap:16px;\n                margin-bottom:16px;\n            }\n\t\t\t.expert_card-top-position{\n\t\t\t\tfont-size: 14px;\n\t\t\t\tline-height: 135%;\n\n\t\t\t}\n            .expert_card-top-img img{\n                width:90px;\n            }\n            .expert_card-top-img-link{\n                width:28px;\n\t\t\t\theight:28px;\n\t\t\t\tbottom: 5px;\n            }\n            .expert_card-top-img-link svg{\n                width: 100%;\n            }\n            .expert_card-top-name{\n                font-size:18px;\n                margin-bottom:8px;\n            }\n            .expert_card-top-right-bottom.desc{\n                display:none;\n            }\n            .expert_card-top-right-bottom.mob{\n                display:flex;\n                gap:4px;\n                margin-bottom:16px;\n            }\n            .expert_card-top-ver, .expert_card-top-year{\n                font-size:14px;\n            }\n            .expert_card-text{\n                font-size:14px;\n                margin-bottom:16px;\n            }\n            .expert_card-bottom{\n                flex-direction:column;\n                gap:16px;\n            }\n\t\t\t.expert_card-bottom-col{\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-columns: repeat(1, 1fr);\n\t\t\t\tgap: 16px;\n\t\t\t\twidth:100%;\n\t\t\t}\n            .expert_card-bottom-expertise{\n                width:100%;\n            }\n            .expert_card-bottom-expertise-title{\n                font-size:12px;\n                margin-bottom:4px;\n            }\n            .expert_card-bottom-expertise-list{\n                font-size:14px;\n                gap:8px;\n            }\n            .expert_card-bottom-featured{\n                width:100%;\n            }\n            .expert_card-bottom-featured-imgs{\n                gap:20px;\n            }\n            .expert_card-bottom-featured-imgs img{\n                height:20px;\n                width:auto;\n            }\n            .expert_card-bottom-a{\n                font-size:14px;\n            }\n\t\t\t.expert_card-top-ver svg{\n\t\t\t\twidth:14px;\n\t\t\t\theight:14px;\n\t\t\t}\n\n        }\n\n\n\n\n\n    <\/style>\n\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4072792 e-con-full e-flex e-con e-parent\" data-id=\"4072792\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-35331e5 e-con-full takeways e-flex e-con e-child\" data-id=\"35331e5\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2f88347 elementor-widget elementor-widget-heading\" data-id=\"2f88347\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Key takeaways<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3159bad elementor-widget elementor-widget-text-editor\" data-id=\"3159bad\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul class=\"blackUl\"><li aria-level=\"1\"><b>PHP2Shell requires urgent patching. <\/b>On 21 October 2026, PHP fixed CVE-2026-109618 and CVE-2026-109619. Both are critical runtime vulnerabilities (CVSS v4.0: 9.2) that can allow unauthenticated remote code execution.<\/li><li aria-level=\"1\"><b>Check the patched versions. <\/b>The first fixed releases are PHP 8.2.35, 8.3.36, 8.4.27, and 8.5.12. Linux distributions may provide the same fixes through backported patches.<\/li><li aria-level=\"1\"><b>Prioritize exposed PHP runtimes. <\/b>Apache mod_php carries the highest reported risk, but PHP-FPM and other web-facing setups also need attention. Framework updates and composer audit won&#8217;t fix PHP2Shell.<\/li><li aria-level=\"1\"><b>Don&#8217;t stop at patching PHP.<\/b> Use the eight-step checklist to review dependencies, application code, server settings, and other security weaknesses.<\/li><li aria-level=\"1\"><b>Verify the fix in production.<\/b> Ask your team for a report showing which PHP builds are actually running, which workloads have been patched, and whether there are signs of earlier compromise.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-91f1506 e-con-full e-flex e-con e-child\" data-id=\"91f1506\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f05f538 elementor-widget elementor-widget-shortcode\" data-id=\"f05f538\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">[summarize_button_ai]<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-05872a5 elementor-widget elementor-widget-shortcode\" data-id=\"05872a5\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">[summarize_button_google]<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-64147d3 elementor-absolute elementor-widget elementor-widget-html\" data-id=\"64147d3\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n    @media (max-width: 768px) {\n        .summarize_ai_button, .summarize_google_button {\n            width: 100%;\n            justify-content: center;\n        }\n    }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-80e5577 translation-block elementor-widget elementor-widget-text-editor\" data-id=\"80e5577\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>According to <a href=\"https:\/\/w3techs.com\/technologies\/details\/pl-php\" target=\"_blank\" rel=\"noopener noreferrer\">W3Techs<\/a>, PHP powers about 70% of websites where the server-side language is known. Because PHP is so common, a vulnerability in the interpreter can put many sites at risk, even if their own code is secure.<\/p><p>On 21 October 2026, the PHP project released emergency patches for two critical vulnerabilities, <a href=\"https:\/\/www.php.net\/archive\/2026.php#2026-10-21-5\" target=\"_blank\" rel=\"noopener noreferrer\">CVE-2026-109618 and CVE-2026-109619<\/a>, together called PHP2Shell. Both scored 9.2 under CVSS v4.0 and allow unauthenticated remote code execution. These flaws affect PHP\u2019s internal memory and request handling.<\/p><p>The first patches were released in PHP 8.2.35, 8.3.36, 8.4.27, and 8.5.12. If your system uses one of the affected versions, update PHP right away and make sure your web server is running the patched version. But the work shouldn\u2019t end there. For teams that build and maintain PHP applications, including Innowise\u2019s <a href=\"https:\/\/innowise.com\/technologies\/php-development\/\">PHP development<\/a> specialists, the October release is also a reason to review dependencies, application code, and server settings.<\/p><p>In this guide, I\u2019ll show you eight steps to find and fix vulnerabilities in your PHP setup and confirm that your fixes work in production.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a5e73bc elementor-widget elementor-widget-shortcode\" data-id=\"a5e73bc\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">[blog_related_services post_in='109332,112175,150379' title='See related services we offer']<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bdd2944 e-con-full e-flex e-con e-parent\" data-id=\"bdd2944\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f35152d elementor-widget__width-initial word-wrap-title elementor-widget elementor-widget-heading\" data-id=\"f35152d\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Expert breakdown: how PHP2Shell differs from a routine dependency CVE<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c6e191c translation-block elementor-widget elementor-widget-text-editor\" data-id=\"c6e191c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A vulnerable Composer package affects code your application uses. PHP2Shell is different. Both vulnerabilities are inside the PHP interpreter itself, and an attacker may trigger them before <a href=\"https:\/\/innowise.com\/technologies\/laravel-development\/\">Laravel<\/a>, <a href=\"https:\/\/innowise.com\/technologies\/symfony-development\/\">Symfony<\/a>, or another framework even starts running. Updating CMS plugins or Composer dependencies won&#8217;t patch PHP, and composer audit won&#8217;t detect these runtime vulnerabilities.<\/p><p>The PHP security team identifies <strong>Apache mod_php<\/strong> as the highest-risk setup for CVE-2026-109618, with a demonstrated attack that works before application code executes. PHP-FPM, CGI, and other web-serving configurations are also affected, although exploitation conditions differ. Researchers have also demonstrated CVE-2026-109619 exploitation against PHP-FPM.<\/p><p>Here&#8217;s what goes wrong in each case:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9c58247 e-con-full e-flex e-con e-child\" data-id=\"9c58247\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7dc6de4 elementor-widget elementor-widget-html\" data-id=\"7dc6de4\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n  .sap-cost-factors-table .row{\r\n    grid-template-columns: 25% 75%;  \r\n  }\r\n  \r\n  .sap-cost-factors-table .row .cell:first-child {\r\n      font-weight: bold;\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n  document.addEventListener(\"DOMContentLoaded\", () => {\r\n    const costFactorsRows = document.querySelectorAll(\".sap-cost-factors-table .row.data\");\r\n    const costFactorsTableToggle = document.querySelector(\".sap-cost-factors-table .table-toggle\");\r\n    const visibleCount = 4;\r\n\r\n    if (!costFactorsTableToggle) return;\r\n\r\n    costFactorsRows.forEach((row, index) => {\r\n      if(matchMedia(\"(max-width: 1024px)\").matches) {\r\n        if (index >= visibleCount) row.classList.add(\"hidden\");\r\n      }\r\n    });\r\n\r\n    let expanded = false;\r\n\r\n    costFactorsTableToggle.addEventListener(\"click\", () => {\r\n      expanded = !expanded;\r\n\r\n      costFactorsRows.forEach((row, index) => {\r\n        if (!expanded && index >= visibleCount) {\r\n          row.classList.add(\"hidden\");\r\n        } else {\r\n          row.classList.remove(\"hidden\");\r\n        }\r\n      });\r\n\r\n      costFactorsTableToggle.textContent = expanded ? \"Show less\" : \"Show more\";\r\n    });\r\n  });\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9d31252 elementor-widget elementor-widget-html\" data-id=\"9d31252\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n    .erp-business-models .erp-business-models-table {\n        width: 100%;\n        max-width: 1000px;\n        margin: 0;\n        border: 0 !important;\n        border-collapse: collapse;\n        table-layout: auto;\n        font-family: \"Karla\", sans-serif;\n        font-size: 18px;\n        line-height: 150%;\n        color: #2E2E2E;\n        background: #FBFBFD !important;\n    }\n\n    .erp-business-models .erp-business-models-table__row,\n    .erp-business-models .erp-business-models-table__row:nth-child(n),\n    .erp-business-models .erp-business-models-table__row:hover {\n        display: table-row;\n        margin: 0;\n        border: 0 !important;\n        background: #FBFBFD !important;\n    }\n\n    .erp-business-models .erp-business-models-table__cell,\n    .erp-business-models .erp-business-models-table__row:nth-child(n) .erp-business-models-table__cell,\n    .erp-business-models .erp-business-models-table__row:hover .erp-business-models-table__cell {\n        border: 0 !important;\n        border-bottom: 1px solid #999999 !important;\n        background: #FBFBFD !important;\n        color: #2E2E2E;\n        font-family: \"Karla\", sans-serif;\n        font-size: inherit;\n        line-height: inherit;\n        text-align: left;\n        text-transform: none;\n        vertical-align: top;\n    }\n\n    .erp-business-models .erp-business-models-table__cell {\n        padding: 20px 0;\n        font-weight: 400;\n    }\n\n    .erp-business-models .erp-business-models-table__cell:not(:last-child) {\n        padding-right: 40px;\n    }\n\n    .erp-business-models .erp-business-models-table__cell:first-child {\n        width: 360px;\n    }\n\n    .erp-business-models .erp-business-models-table__row_data .erp-business-models-table__cell:first-child {\n        font-weight: 400 !important;\n    }\n\n    .erp-business-models .erp-business-models-table__row_header .erp-business-models-table__cell {\n        padding: 0 0 10px;\n        font-weight: 700;\n    }\n\n    .erp-business-models .erp-business-models-table__row_header:nth-child(n) .erp-business-models-table__cell {\n        text-align: center;\n        vertical-align: middle;\n    }\n\n    .erp-business-models .erp-business-models-table__row_header .erp-business-models-table__cell:not(:last-child) {\n        padding-right: 40px;\n    }\n\n    .erp-business-models .erp-business-models__wrapper {\n        width: 100%;\n        max-width: 100%;\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n    }\n\n    @media (max-width: 767px) {\n        .erp-business-models .erp-business-models-table {\n            min-width: 760px;\n            font-size: 16px;\n        }\n\n        .erp-business-models .erp-business-models-table__cell:first-child {\n            width: 200px;\n        }\n\n        .erp-business-models .erp-business-models-table__cell:not(:last-child),\n        .erp-business-models .erp-business-models-table__row_header .erp-business-models-table__cell:not(:last-child) {\n            padding-right: 30px;\n        }\n    }\n<\/style>\n<div class=\"erp-business-models\">\n    <div class=\"erp-business-models__wrapper\">\n        <table class=\"erp-business-models-table\">\n            <thead>\n            <tr class=\"erp-business-models-table__row erp-business-models-table__row_header\">\n                <th class=\"erp-business-models-table__cell\">CVE<\/th>\n                <th class=\"erp-business-models-table__cell\">Root cause<\/th>\n                <th class=\"erp-business-models-table__cell\">Why teams should care<\/th>\n            <\/tr>\n            <\/thead>\n            <tbody>\n            <tr class=\"erp-business-models-table__row erp-business-models-table__row_data\">\n                <td class=\"erp-business-models-table__cell\">CVE-2026-109618<\/td>\n                <td class=\"erp-business-models-table__cell\">If PHP runs out of memory while processing a request, some internal data may be left in an invalid state. When PHP cleans up the failed request, it may use that data.<\/td>\n                <td class=\"erp-business-models-table__cell\">If PHP runs out of memory while processing a request, some internal data may be left in an invalid state. When PHP cleans up the failed request, it may use that data.<\/td>\n            <\/tr>\n            <tr class=\"erp-business-models-table__row erp-business-models-table__row_data\">\n                <td class=\"erp-business-models-table__cell\">CVE-2026-109619<\/td>\n                <td class=\"erp-business-models-table__cell\">A PHP worker may keep a reference to memory that was freed after an earlier request. When the worker handles another request, it may try to use that old reference.<\/td>\n                <td class=\"erp-business-models-table__cell\">The problem can carry over between requests handled by the same worker. Checking individual application requests won't necessarily reveal it.<\/td>\n            <\/tr>\n            <\/tbody>\n        <\/table>\n    <\/div>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5261593 translation-block elementor-widget elementor-widget-text-editor\" data-id=\"5261593\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Both flaws can lead to remote code execution without authentication. The fix belongs in the PHP runtime, not in the application&#8217;s dependencies.<\/p>\n<p>For a deeper technical explanation, you can check the PHP project&#8217;s advisories for <a href=\"https:\/\/github.com\/php\/php-src\/security\/advisories\/GHSA-w8hw-w9fx-j79w\" target=\"_blank\" rel=\"noopener noreferrer\">CVE-2026-109618<\/a> and <a href=\"https:\/\/github.com\/php\/php-src\/security\/advisories\/GHSA-6wmf-4rv5-p3rp\" target=\"_blank\" rel=\"noopener noreferrer\">CVE-2026-109619<\/a>.<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7b68ff1 e-con-full e-flex e-con e-parent\" data-id=\"7b68ff1\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-677c8e5 e-con-full e-flex e-con e-child\" data-id=\"677c8e5\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2cb53b1 elementor-widget elementor-widget-heading\" data-id=\"2cb53b1\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Where do PHP security vulnerabilities come from?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f0876bc elementor-widget elementor-widget-text-editor\" data-id=\"f0876bc\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>As I mentioned earlier, updating PHP won&#8217;t fix a vulnerable Composer package, and a clean dependency scan won&#8217;t catch problems in your own code. When reviewing a PHP application, I look at four sources of security risk, each with its own potential consequences.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f0f7cad e-con-full e-flex e-con e-child\" data-id=\"f0f7cad\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-020eca4 elementor-widget elementor-widget-html\" data-id=\"020eca4\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n  .sap-cost-factors-table .row{\r\n    grid-template-columns: 25% 75%;  \r\n  }\r\n  \r\n  .sap-cost-factors-table .row .cell:first-child {\r\n      font-weight: bold;\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n  document.addEventListener(\"DOMContentLoaded\", () => {\r\n    const costFactorsRows = document.querySelectorAll(\".sap-cost-factors-table .row.data\");\r\n    const costFactorsTableToggle = document.querySelector(\".sap-cost-factors-table .table-toggle\");\r\n    const visibleCount = 4;\r\n\r\n    if (!costFactorsTableToggle) return;\r\n\r\n    costFactorsRows.forEach((row, index) => {\r\n      if(matchMedia(\"(max-width: 1024px)\").matches) {\r\n        if (index >= visibleCount) row.classList.add(\"hidden\");\r\n      }\r\n    });\r\n\r\n    let expanded = false;\r\n\r\n    costFactorsTableToggle.addEventListener(\"click\", () => {\r\n      expanded = !expanded;\r\n\r\n      costFactorsRows.forEach((row, index) => {\r\n        if (!expanded && index >= visibleCount) {\r\n          row.classList.add(\"hidden\");\r\n        } else {\r\n          row.classList.remove(\"hidden\");\r\n        }\r\n      });\r\n\r\n      costFactorsTableToggle.textContent = expanded ? \"Show less\" : \"Show more\";\r\n    });\r\n  });\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9c09f46 elementor-widget elementor-widget-html\" data-id=\"9c09f46\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n    .erp-business-models .erp-business-models-table {\n        width: 100%;\n        max-width: 1000px;\n        margin: 0;\n        border: 0 !important;\n        border-collapse: collapse;\n        table-layout: auto;\n        font-family: \"Karla\", sans-serif;\n        font-size: 18px;\n        line-height: 150%;\n        color: #2E2E2E;\n        background: #FBFBFD !important;\n    }\n\n    .erp-business-models .erp-business-models-table__row,\n    .erp-business-models .erp-business-models-table__row:nth-child(n),\n    .erp-business-models .erp-business-models-table__row:hover {\n        display: table-row;\n        margin: 0;\n        border: 0 !important;\n        background: #FBFBFD !important;\n    }\n\n    .erp-business-models .erp-business-models-table__cell,\n    .erp-business-models .erp-business-models-table__row:nth-child(n) .erp-business-models-table__cell,\n    .erp-business-models .erp-business-models-table__row:hover .erp-business-models-table__cell {\n        border: 0 !important;\n        border-bottom: 1px solid #999999 !important;\n        background: #FBFBFD !important;\n        color: #2E2E2E;\n        font-family: \"Karla\", sans-serif;\n        font-size: inherit;\n        line-height: inherit;\n        text-align: left;\n        text-transform: none;\n        vertical-align: top;\n    }\n\n    .erp-business-models .erp-business-models-table__cell {\n        padding: 20px 0;\n        font-weight: 400;\n    }\n\n    .erp-business-models .erp-business-models-table__cell:not(:last-child) {\n        padding-right: 40px;\n    }\n\n    .erp-business-models .erp-business-models-table__cell:first-child {\n        width: 360px;\n    }\n\n    .erp-business-models .erp-business-models-table__row_header .erp-business-models-table__cell {\n        padding: 0 0 10px;\n        font-weight: 700;\n    }\n\n    .erp-business-models .erp-business-models-table__row_header:nth-child(n) .erp-business-models-table__cell {\n        text-align: center;\n        vertical-align: middle;\n    }\n\n    .erp-business-models .erp-business-models-table__row_header .erp-business-models-table__cell:not(:last-child) {\n        padding-right: 40px;\n    }\n\n    .erp-business-models .erp-business-models__wrapper {\n        width: 100%;\n        max-width: 100%;\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n    }\n\n    @media (max-width: 767px) {\n        .erp-business-models .erp-business-models-table {\n            min-width: 760px;\n            font-size: 16px;\n        }\n\n        .erp-business-models .erp-business-models-table__cell:first-child {\n            width: 200px;\n        }\n\n        .erp-business-models .erp-business-models-table__cell:not(:last-child),\n        .erp-business-models .erp-business-models-table__row_header .erp-business-models-table__cell:not(:last-child) {\n            padding-right: 30px;\n        }\n    }\n<\/style>\n<div class=\"erp-business-models\">\n    <div class=\"erp-business-models__wrapper\">\n        <table class=\"erp-business-models-table\">\n            <thead>\n            <tr class=\"erp-business-models-table__row erp-business-models-table__row_header\">\n                <th class=\"erp-business-models-table__cell\">Category<\/th>\n                <th class=\"erp-business-models-table__cell\">Examples<\/th>\n                <th class=\"erp-business-models-table__cell\">Main risk<\/th>\n            <\/tr>\n            <\/thead>\n            <tbody>\n            <tr class=\"erp-business-models-table__row erp-business-models-table__row_data\">\n                <td class=\"erp-business-models-table__cell\">PHP runtime<\/td>\n                <td class=\"erp-business-models-table__cell\">Unpatched PHP versions, interpreter vulnerabilities, unsupported releases<\/td>\n                <td class=\"erp-business-models-table__cell\">Attackers exploit flaws in PHP itself, regardless of how securely the application is written<\/td>\n            <\/tr>\n            <tr class=\"erp-business-models-table__row erp-business-models-table__row_data\">\n                <td class=\"erp-business-models-table__cell\">Third-party dependencies<\/td>\n                <td class=\"erp-business-models-table__cell\">Composer packages, CMS plugins, frameworks<\/td>\n                <td class=\"erp-business-models-table__cell\">Vulnerable third-party code exposes applications to attacks even when your own code is secure<\/td>\n            <\/tr>\n            <tr class=\"erp-business-models-table__row erp-business-models-table__row_data\">\n                <td class=\"erp-business-models-table__cell\">Application code<\/td>\n                <td class=\"erp-business-models-table__cell\">SQL injection, XSS, CSRF, insecure deserialization, broken access control<\/td>\n                <td class=\"erp-business-models-table__cell\">Coding flaws may let attackers steal data, perform unauthorized actions, or compromise the application<\/td>\n            <\/tr>\n            <tr class=\"erp-business-models-table__row erp-business-models-table__row_data\">\n                <td class=\"erp-business-models-table__cell\">Configuration and infrastructure<\/td>\n                <td class=\"erp-business-models-table__cell\">Insecure PHP settings, exposed files, excessive permissions<\/td>\n                <td class=\"erp-business-models-table__cell\">Misconfigurations may expose sensitive information or give attackers more access than intended<\/td>\n            <\/tr>\n            <\/tbody>\n        <\/table>\n    <\/div>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8aa349a e-con-full cta2 e-flex e-con e-child\" data-id=\"8aa349a\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-94ce89f relative animated-circle-adaptive e-con-full e-flex e-con e-child\" data-id=\"94ce89f\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-1cf304c e-con-full e-flex e-con e-child\" data-id=\"1cf304c\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8785603 elementor-widget-tablet__width-inherit elementor-widget elementor-widget-heading\" data-id=\"8785603\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\">Address PHP vulnerabilities before they escalate<\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-54dae6b e-con-full e-flex e-con e-child\" data-id=\"54dae6b\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-eaac16c elementor-align-left elementor-widget__width-initial elementor-widget-mobile__width-inherit cta-btn elementor-widget elementor-widget-button\" data-id=\"eaac16c\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#contact-form\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Talk to experts<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f843374 elementor-absolute elementor-widget-mobile__width-inherit transform elementor-widget-tablet__width-inherit elementor-widget elementor-widget-html\" data-id=\"f843374\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"wave-container\"><\/div>\r\n\r\n<style>\r\n  .wave-container {\r\n    position: relative;\r\n    width: 320px;\r\n    height: 320px;\r\n  }\r\n\r\n  @media(max-width: 1279px) {\r\n    .wave-container {\r\n      width: 100%;\r\n      height: 100%;\r\n    }\r\n  }\r\n\r\n\r\n  .wave {\r\n    position: absolute;\r\n    border: 1px solid rgba(210, 184, 214, 1);\r\n    border-radius: 50%;\r\n    animation: drop 16s infinite;\r\n    top: 50%;\r\n    left: 50%;\r\n    transform: translate(-50%, -50%);\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  @keyframes drop {\r\n    0% {\r\n      width: 0px;\r\n      height: 0px;\r\n      border: 1px solid rgba(210, 184, 214, 1);\r\n    }\r\n    100% {\r\n      width: 400px;\r\n      height: 400px;\r\n      border: 1px solid rgba(210, 184, 214, 0);\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n\r\n  document.addEventListener('DOMContentLoaded', () => {\r\n    function createWaves(numberOfWaves) {\r\n      const waveContainers = document.querySelectorAll('.cta2 .wave-container');\r\n\r\n      waveContainers.forEach((waveContainer) => {\r\n        for (let i = 0; i < numberOfWaves; i++) {\r\n          const wave = document.createElement('div');\r\n          wave.classList.add('wave');\r\n\r\n          wave.style.animationDelay = `${i * 0.8}s`;\r\n\r\n          waveContainer.appendChild(wave);\r\n        }\r\n      });\r\n    }\r\n\r\n    createWaves(10)\r\n  });\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ca4156d e-con-full e-flex e-con e-child\" data-id=\"ca4156d\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f14f0d6 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"f14f0d6\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">PHP security checklist: 8 essential checks<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2b47a10 translation-block elementor-widget elementor-widget-text-editor\" data-id=\"2b47a10\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Next, let\u2019s go through eight security checks I\u2019d use for an existing PHP application. I\u2019d start with the PHP runtime serving live requests, then review the code, dependencies, and configuration for issues a PHP update alone won\u2019t address.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-15551a9 e-con-full e-flex e-con e-child\" data-id=\"15551a9\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c3c80c8 elementor-widget elementor-widget-text-editor\" data-id=\"c3c80c8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Check your PHP version and security patches<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e59142d translation-block elementor-widget elementor-widget-text-editor\" data-id=\"e59142d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>First, identify which PHP runtimes your applications use: Apache mod_php, PHP-FPM, php-cgi, FrankenPHP, or LiteSpeed. Include separate FPM pools, containers, CLI installations, queue workers, and scheduled jobs.<\/p>\n<p>Don&#8217;t rely on php -v or php &#8211;ini alone. php -v shows the CLI version, while php &#8211;ini shows its configuration. Neither confirms the PHP runtime serving web requests.<\/p>\n<p>Compare the active runtime and its configuration with the <a href=\"https:\/\/www.php.net\/archive\/2026.php#2026-10-21-5\" target=\"_blank\" rel=\"noopener noreferrer\">official PHP advisory<\/a>, including affected versions and exposure conditions. Apache mod_php has the strongest demonstrated PHP2Shell exposure, including an exploit path before application code runs. PHP-FPM exposure depends on configuration and execution paths. Other SAPIs also need assessment, as the SAPI alone doesn&#8217;t establish whether a deployment is safe.<\/p>\n<p>The first upstream releases containing both fixes were:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c295e6f e-con-full e-flex e-con e-child\" data-id=\"c295e6f\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a7b764f elementor-widget elementor-widget-html\" data-id=\"a7b764f\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n    .php-releases {\n        max-width: 600px;\n        margin-bottom: 40px !important;\n    }\n\n    .php-releases__wrapper {\n        overflow-x: auto;\n        overflow-y: hidden;\n        margin: 0 !important;\n    }\n\n    .php-releases .php-releases-table {\n        margin: 0 !important;\n        width: 100%;\n        table-layout: fixed;\n        border: 0 !important;\n        border-collapse: collapse;\n        font-family: \"Karla\", sans-serif;\n        font-size: 18px;\n        line-height: 150%;\n        color: #2E2E2E;\n        background: #FBFBFD !important;\n    }\n\n    .php-releases .php-releases-table__row,\n    .php-releases .php-releases-table__row:nth-child(n),\n    .php-releases .php-releases-table__row:hover {\n        border: 0 !important;\n        background: #FBFBFD !important;\n    }\n\n    .php-releases .php-releases-table__cell,\n    .php-releases .php-releases-table__row:nth-child(n) .php-releases-table__cell,\n    .php-releases .php-releases-table__row:hover .php-releases-table__cell {\n        border: 0 !important;\n        border-bottom: 1px solid #999999 !important;\n        background: #FBFBFD !important;\n        color: #2E2E2E;\n        font-family: \"Karla\", sans-serif;\n        font-size: inherit;\n        line-height: inherit;\n        text-align: left;\n        text-transform: none;\n        vertical-align: top;\n    }\n\n    .php-releases .php-releases-table__cell {\n        width: 280px;\n        padding: 20px 0;\n        box-sizing: border-box;\n        font-weight: 400;\n    }\n\n    .php-releases .php-releases-table__cell:first-child {\n        width: 320px;\n        padding-right: 40px;\n    }\n\n    .php-releases .php-releases-table__row_header .php-releases-table__cell {\n        padding-top: 0;\n        padding-bottom: 10px;\n        font-weight: 700;\n    }\n\n    @media (max-width: 767px) {\n        .php-releases .php-releases-table {\n            font-size: 14px;\n        }\n\n        .php-releases .php-releases-table__cell {\n            width: calc(50% - 10px);\n        }\n\n        .php-releases .php-releases-table__cell:first-child {\n            width: calc(50% + 10px);\n            padding-right: 20px;\n        }\n    }\n<\/style>\n<div class=\"php-releases\">\n    <div class=\"php-releases__wrapper\">\n        <table class=\"php-releases-table\">\n            <thead>\n            <tr class=\"php-releases-table__row php-releases-table__row_header\">\n                <th class=\"php-releases-table__cell\">PHP branch<\/th>\n                <th class=\"php-releases-table__cell\">First fixed release<\/th>\n            <\/tr>\n            <\/thead>\n            <tbody>\n            <tr class=\"php-releases-table__row php-releases-table__row_data\">\n                <td class=\"php-releases-table__cell\">8.2<\/td>\n                <td class=\"php-releases-table__cell\">8.2.35<\/td>\n            <\/tr>\n            <tr class=\"php-releases-table__row php-releases-table__row_data\">\n                <td class=\"php-releases-table__cell\">8.3<\/td>\n                <td class=\"php-releases-table__cell\">8.3.36<\/td>\n            <\/tr>\n            <tr class=\"php-releases-table__row php-releases-table__row_data\">\n                <td class=\"php-releases-table__cell\">8.4<\/td>\n                <td class=\"php-releases-table__cell\">8.4.27<\/td>\n            <\/tr>\n            <tr class=\"php-releases-table__row php-releases-table__row_data\">\n                <td class=\"php-releases-table__cell\">8.5<\/td>\n                <td class=\"php-releases-table__cell\">8.5.12<\/td>\n            <\/tr>\n            <\/tbody>\n        <\/table>\n    <\/div>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-06ca19a translation-block elementor-widget elementor-widget-text-editor\" data-id=\"06ca19a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>These versions are listed in the PHP advisories for <a href=\"https:\/\/github.com\/php\/php-src\/security\/advisories\/GHSA-w8hw-w9fx-j79w\" target=\"_blank\" rel=\"noopener noreferrer\">CVE-2026-109618<\/a> and <a href=\"https:\/\/github.com\/php\/php-src\/security\/advisories\/GHSA-6wmf-4rv5-p3rp\" target=\"_blank\" rel=\"noopener noreferrer\">CVE-2026-109619<\/a>. Check for newer security releases before updating.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b175ab6 elementor-widget elementor-widget-text-editor\" data-id=\"b175ab6\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4>Verify PHP patches on Linux and in containers<\/h4>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a02f2df translation-block elementor-widget elementor-widget-text-editor\" data-id=\"a02f2df\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Check the active runtime.<\/strong> Review your web-server configuration to identify the PHP module, FPM pool, or embedded SAPI handling requests. Confirm its version using access-restricted diagnostics, and remove any temporary endpoints afterward. Never expose <code>phpinfo()<\/code> or a version endpoint publicly.<\/p><p><strong>Check installed packages.<\/strong> On Ubuntu with PHP 8.3, these read-only commands show installed packages and available versions:<\/p><pre><code>dpkg-query -W 'php8.3*'\napt-cache policy php8.3-fpm<\/code><\/pre><p>Adjust package names for your PHP branch and compare the installed versions with the vendor&#8217;s security notice or package changelog. Linux vendors may backport fixes into older PHP versions. For example, Ubuntu lists these patched builds:<\/p><ul><li><p><strong>Ubuntu 24.04<\/strong>: 8.3.6-0ubuntu0.24.04.13<\/p><\/li><li><p><strong>Ubuntu 22.04<\/strong>: 8.1.2-1ubuntu2.28<\/p><\/li><\/ul><p>Both contain the relevant fixes despite their lower version numbers. Check the <a href=\"https:\/\/ubuntu.com\/security\/notices\/USN-8948-1\" target=\"_blank\" rel=\"noopener noreferrer\">Ubuntu security notice<\/a>.<\/p><p><strong>Patch and redeploy.<\/strong> Install the patched packages. For containers, record the running image digest, update vulnerable PHP base images, rebuild, and redeploy affected workloads, including queue workers.<\/p><p><strong>Verify the result.<\/strong> Restart or replace affected PHP workers and confirm that running processes and containers use patched builds or verified vendor backports. Record package versions, running image digests, restart details, and verification results.<\/p><p>PHP 8.1 and earlier are no longer supported upstream, although some vendors still provide security backports. Check whether your installed build is covered and upgrade if it isn&#8217;t. PHP 8.2 security support ends on <strong>31 December 2026<\/strong>, so pair any short-term patch with an upgrade plan. You can find the full support timeline in the <a href=\"https:\/\/www.php.net\/supported-versions.php\" target=\"_blank\" rel=\"noopener noreferrer\">PHP support schedule<\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-04b621d e-con-full e-flex e-con e-child\" data-id=\"04b621d\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9e2bf50 elementor-widget elementor-widget-text-editor\" data-id=\"9e2bf50\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Audit dependencies and frameworks<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e009fa1 elementor-widget elementor-widget-text-editor\" data-id=\"e009fa1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Start with <strong><code>composer.lock<\/code><\/strong>. It records the package versions your application depends on, including those installed indirectly through other packages. Run these two commands:<\/p>\n<pre><code>composer audit --locked\ncomposer outdated<\/code><\/pre>\n<p><code>composer audit --locked<\/code> checks the locked versions against known security advisories and can flag abandoned packages. <code>composer outdated<\/code> shows which updates are available, but an outdated package isn&#8217;t necessarily vulnerable. Check Laravel or Symfony advisories too, especially if your framework version is no longer supported.<\/p>\n<p>Compare the packages deployed in production with the versions in the audited lock file. Keep the audit results and installed-package inventory with your release records.<\/p>\n<p>If you find vulnerable packages, update them to compatible patched versions and test the affected functionality. Replace libraries that no longer receive security fixes. If compatibility issues block a framework upgrade, document them and the migration work needed. Don&#8217;t overlook CMS plugins or libraries installed outside Composer.<\/p>\n<p><strong>A clean Composer audit doesn&#8217;t confirm that PHP2Shell is fixed.<\/strong> The audit checks Composer packages, while PHP2Shell requires a separate check of the PHP interpreter and its patches. To assess the application itself, use SAST to analyze source code and DAST to test the running application.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-579b1dd e-con-full e-flex e-con e-child\" data-id=\"579b1dd\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fb42eaa elementor-widget elementor-widget-text-editor\" data-id=\"fb42eaa\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Review PHP and server configurations<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bf8b992 elementor-widget elementor-widget-text-editor\" data-id=\"bf8b992\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Check the PHP settings actually used by your web server, including PHP-FPM pool overrides and loaded extensions. Remember that <code>php --ini<\/code> shows the CLI configuration, which may differ from the live application.<\/p>\n<p>For production, start with:<\/p>\n<pre><code>display_errors = Off\nlog_errors = On<\/code><\/pre>\n<p>Keep logs outside publicly accessible directories and restrict access to them. Remove public <code>phpinfo()<\/code> pages and debug endpoints, and review <code>expose_php<\/code>, unnecessary extensions, and filesystem permissions.<\/p>\n<p>Disabling <code>display_errors<\/code> reduces information disclosure, but <strong>doesn&#8217;t mitigate CVE-2026-109619<\/strong>. The vulnerable code path may run before PHP handles the error message.<\/p>\n<h4>Temporary measures when PHP patching is delayed<\/h4>\n<p>If patching must wait, follow the <a href=\"https:\/\/www.php.net\/archive\/2026.php#2026-10-21-5\" target=\"_blank\" rel=\"noopener noreferrer\">official PHP advisory<\/a> for your configuration.<\/p>\n<ul>\n    <li><p><strong>CVE-2026-109619:<\/strong> Disable <code>session.upload_progress.enabled<\/code> and, on PHP 8.5, set <code>fatal_error_backtraces=0<\/code>. Apply these settings before request processing through the server or pool configuration, then restart affected workers. Other exploit paths may remain.<\/p><\/li>\n    <li><p><strong>CVE-2026-109618:<\/strong> Enforce <code>memory_limit=-1<\/code> at server or pool level and restart affected workers. This removes the predictable PHP memory-limit failure path but leaves other allocation failures possible. Check request limits and host or container memory protections to reduce denial-of-service risks.<\/p><\/li>\n<\/ul>\n<p>PHP also published a <a href=\"https:\/\/www.php.net\/archive\/2026.php#2026-10-23-1\" target=\"_blank\" rel=\"noopener noreferrer\">separate advisory for CVE-2026-115560<\/a> on 23 October. It concerns applications that switch <code>session.serialize_handler<\/code> from <code>php_binary<\/code> or <code>php_serialize<\/code> to <code>php<\/code> using <code>ini_set()<\/code> before <code>session_start()<\/code>, with upload progress enabled. Affected setups should disable upload progress pending a fix.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4b8dc69 e-con-full cta2 e-flex e-con e-child\" data-id=\"4b8dc69\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-27a3609 relative animated-circle-adaptive e-con-full e-flex e-con e-child\" data-id=\"27a3609\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-20a3a11 e-con-full e-flex e-con e-child\" data-id=\"20a3a11\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-256a321 elementor-widget-tablet__width-inherit elementor-widget elementor-widget-heading\" data-id=\"256a321\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\">Get an upgrade plan for the legacy PHP apps your business depends on<\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7464f88 e-con-full e-flex e-con e-child\" data-id=\"7464f88\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5c3443f elementor-align-left elementor-widget__width-initial elementor-widget-mobile__width-inherit cta-btn elementor-widget elementor-widget-button\" data-id=\"5c3443f\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#contact-form\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Contact us<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-20429b0 elementor-absolute elementor-widget-mobile__width-inherit transform elementor-widget-tablet__width-inherit elementor-widget elementor-widget-html\" data-id=\"20429b0\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"wave-container\"><\/div>\r\n\r\n<style>\r\n  .wave-container {\r\n    position: relative;\r\n    width: 320px;\r\n    height: 320px;\r\n  }\r\n\r\n  @media(max-width: 1279px) {\r\n    .wave-container {\r\n      width: 100%;\r\n      height: 100%;\r\n    }\r\n  }\r\n\r\n\r\n  .wave {\r\n    position: absolute;\r\n    border: 1px solid rgba(210, 184, 214, 1);\r\n    border-radius: 50%;\r\n    animation: drop 16s infinite;\r\n    top: 50%;\r\n    left: 50%;\r\n    transform: translate(-50%, -50%);\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  @keyframes drop {\r\n    0% {\r\n      width: 0px;\r\n      height: 0px;\r\n      border: 1px solid rgba(210, 184, 214, 1);\r\n    }\r\n    100% {\r\n      width: 400px;\r\n      height: 400px;\r\n      border: 1px solid rgba(210, 184, 214, 0);\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n\r\n  document.addEventListener('DOMContentLoaded', () => {\r\n    function createWaves(numberOfWaves) {\r\n      const waveContainers = document.querySelectorAll('.cta2 .wave-container');\r\n\r\n      waveContainers.forEach((waveContainer) => {\r\n        for (let i = 0; i < numberOfWaves; i++) {\r\n          const wave = document.createElement('div');\r\n          wave.classList.add('wave');\r\n\r\n          wave.style.animationDelay = `${i * 0.8}s`;\r\n\r\n          waveContainer.appendChild(wave);\r\n        }\r\n      });\r\n    }\r\n\r\n    createWaves(10)\r\n  });\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-941c291 e-con-full e-flex e-con e-child\" data-id=\"941c291\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-57e7573 elementor-widget elementor-widget-text-editor\" data-id=\"57e7573\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Check for SQL injection, XSS, and unsafe code execution<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-497d1bd elementor-widget elementor-widget-text-editor\" data-id=\"497d1bd\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Poorly handled user input can expose sensitive data or let attackers run malicious code. I recommend you use code review to trace risky input paths and SAST to flag possible vulnerabilities. Authorized DAST tests the running application, while <a href=\"https:\/\/innowise.com\/services\/web-application-penetration-testing\/\">penetration testing<\/a> helps determine which weaknesses attackers could exploit. Apps built through <a href=\"https:\/\/innowise.com\/blog\/vibe-coding-security\/\">vibe coding<\/a> can have the same flaws and need the same checks.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9750794 e-con-full e-flex e-con e-child\" data-id=\"9750794\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9f073fe elementor-widget elementor-widget-text-editor\" data-id=\"9f073fe\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4>SQL injection<\/h4>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a45b96c elementor-widget elementor-widget-text-editor\" data-id=\"a45b96c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>SQL injection happens when user input changes the structure of a database query. Check how your application builds queries, especially in search forms and reports.<\/p>\n<p>To keep user input separate from SQL commands, use PDO prepared statements:<\/p>\n<pre><code>$stmt = $pdo-&gt;prepare(\n    'SELECT id FROM users WHERE email = :email'\n);\n$stmt-&gt;execute(['email' =&gt; $email]);<\/code><\/pre>\n<p>Prepared statements keep data values separate from SQL syntax, as the <code>:email<\/code> placeholder does in the example. But placeholders can&#8217;t represent table or column names. For example, if users can sort a report, select the allowed columns from a list defined in the application. Test the affected queries after making changes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fce8f9b e-con-full e-flex e-con e-child\" data-id=\"fce8f9b\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a79e52e elementor-widget elementor-widget-text-editor\" data-id=\"a79e52e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4>Cross-site scripting<\/h4>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-848ee88 elementor-widget elementor-widget-text-editor\" data-id=\"848ee88\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Cross-site scripting (XSS) occurs when an application displays untrusted data that a browser can execute as code. Check PHP templates for user input displayed without proper escaping, especially where automatic escaping is disabled.<\/p><p>For example, if your application displays a user&#8217;s name as HTML text, use <code>htmlspecialchars()<\/code> to convert special characters so the browser treats them as text:<\/p><pre><code>echo htmlspecialchars(\n    $name,\n    ENT_QUOTES | ENT_SUBSTITUTE,\n    'UTF-8'\n);<\/code><\/pre><p>The right protection depends on where the data appears. JavaScript, URLs, and HTML attributes require context-specific checks and encoding. If users can submit formatted HTML, use an HTML sanitizer to remove unsafe elements while keeping permitted formatting.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-057e87a e-con-full e-flex e-con e-child\" data-id=\"057e87a\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2cce81c elementor-widget elementor-widget-text-editor\" data-id=\"2cce81c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4>Unsafe code and command execution<\/h4>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3315837 elementor-widget elementor-widget-text-editor\" data-id=\"3315837\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Some PHP functions can execute system commands or PHP code. Check whether untrusted input reaches <code>exec()<\/code>, <code>shell_exec()<\/code>, or <code>eval()<\/code>. Also review dynamic file inclusion and the use of <code>unserialize()<\/code> with data from untrusted sources.<\/p><p>Where possible, use a PHP API instead of running a shell command. If you need to start an external program, specify the executable and pass its arguments separately. Here&#8217;s an example using Symfony Process:<\/p><pre><code>use Symfony\\Component\\Process\\Process;\n\n\/\/ Validate $filePath against approved paths first.\n$process = new Process([\n    '\/usr\/bin\/file',\n    '--',\n    $filePath\n]);\n$process-&gt;mustRun();<\/code><\/pre><p>This example uses the file utility to identify a file&#8217;s type. Symfony Process passes <code>$filePath<\/code> as a separate argument rather than inserting it into a shell command string. You still need to validate the path, restrict the service account&#8217;s filesystem access, and allow only the operations your application requires.<\/p><p>Deserialization needs a separate check. Avoid passing untrusted data to <code>unserialize()<\/code>, even with <code>allowed_classes<\/code> restrictions. Where suitable, use JSON instead and validate the decoded values.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-071e5b5 e-con-full e-flex e-con e-child\" data-id=\"071e5b5\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-693ed79 elementor-widget elementor-widget-text-editor\" data-id=\"693ed79\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Review authentication, sessions, and access control<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-df29060 elementor-widget elementor-widget-text-editor\" data-id=\"df29060\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>Start with passwords.<\/b> They shouldn&#8217;t be stored in a readable form. Check that your application uses PHP&#8217;s password_hash() and password_verify(), or the equivalent framework methods. Look for older hashing code that may no longer be secure.<\/p><p>Next, <b>check what happens when someone logs in. <\/b>The application should generate a new session ID so an ID obtained before login cannot be reused to access the account. Review session.use_strict_mode and cookie settings like Secure, HttpOnly, and SameSite. Test session ID regeneration through your framework, including when multiple requests arrive at once.<\/p><p>Now <b>test whether users can see data that doesn&#8217;t belong to them<\/b>. Create two test accounts, each with its own invoice. Log in to the first account and change the invoice ID in a request to the one belonging to the second account. The server should deny access unless that user has permission.<\/p><p>Repeat the test for editing invoices, downloading files, and API requests. Check that regular users cannot access admin functions. <b>Being logged in doesn&#8217;t automatically give someone permission to access every record. <\/b>The server must check permissions for every request to a protected record or API endpoint.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-00f9fe3 e-con-full e-flex e-con e-child\" data-id=\"00f9fe3\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c63e85d elementor-widget elementor-widget-text-editor\" data-id=\"c63e85d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Verify CSRF protection<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a884361 elementor-widget elementor-widget-text-editor\" data-id=\"a884361\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A CSRF attack tricks a logged-in user&#8217;s browser into performing an action they didn&#8217;t authorize, such as changing account details. Start by checking forms and requests that modify data, especially those authenticated through session cookies.<\/p>\n<p>Review the CSRF protection in your Laravel or Symfony application and check whether any routes are excluded. Where token validation applies, test requests with missing or invalid tokens. Also check that forged requests from another website cannot change user data. Check the <code>SameSite<\/code> setting on session cookies as well.<\/p>\n<p>In Laravel Blade, <code>@csrf<\/code> adds a hidden token field to a form:<\/p>\n<pre><code>&lt;form method=\"POST\" action=\"\/profile\"&gt;\n    @csrf\n    &lt;button type=\"submit\"&gt;Save changes&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>There&#8217;s an important detail in Laravel 13. Its CSRF middleware first checks the <code>Sec-Fetch-Site<\/code> header. A same-origin request may pass without a token, while other requests fall back to token validation by default. Laravel also disables CSRF protection during automated tests by default, so make sure it&#8217;s enabled when testing these defenses.<\/p>\n<p>For APIs, the authentication method matters. A stateless API using bearer tokens in authorization headers generally faces different CSRF risks. But if your SPA relies on session cookies, it still needs protection against forged requests.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2a58ebe e-con-full e-flex e-con e-child\" data-id=\"2a58ebe\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6e0937d elementor-widget elementor-widget-text-editor\" data-id=\"6e0937d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Secure file uploads and file access<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d66cc4 elementor-widget elementor-widget-text-editor\" data-id=\"3d66cc4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>File uploads become a security risk when attackers can upload executable files or access data they shouldn&#8217;t see. Check which file types and sizes your application accepts, where uploads are stored, and who can download them. Test upload and download routes for path traversal, make sure uploaded files cannot run as PHP, and check that <code>.env<\/code>, <code>.git<\/code>, and backup files aren&#8217;t publicly accessible.<\/p>\n<p>Below is a PHP example that checks an uploaded file&#8217;s MIME type and saves it under a randomly generated name:<\/p>\n<pre><code>if (($_FILES['file']['error'] ?? null) !== UPLOAD_ERR_OK) {\n    throw new RuntimeException('Upload failed');\n}\n\n$tmp = $_FILES['file']['tmp_name'];\n$allowed = ['image\/jpeg' =&gt; 'jpg', 'image\/png' =&gt; 'png'];\n$mime = (new finfo(FILEINFO_MIME_TYPE))-&gt;file($tmp);\n\nif (!isset($allowed[$mime])) {\n    throw new RuntimeException('Unsupported file type');\n}\n\n$name = bin2hex(random_bytes(16)) . '.' . $allowed[$mime];\n$target = '\/var\/app\/private-uploads\/' . $name;\n\nif (!move_uploaded_file($tmp, $target)) {\n    throw new RuntimeException('Unable to save upload');\n}<\/code><\/pre>\n<p>The example assumes a single file upload and an existing, private directory with appropriate permissions. PHP&#8217;s <code>move_uploaded_file()<\/code> confirms that the source was uploaded through PHP&#8217;s HTTP POST mechanism.<\/p>\n<p><strong>MIME checking alone isn&#8217;t enough to make uploads safe.<\/strong> Production code also needs server-enforced file-size limits, upload and download permissions, and validation of the actual file contents. Re-encode images where appropriate and consider malware scanning for higher-risk uploads. Keep files outside the web root where practical, restrict filesystem access, and prevent uploaded files from executing as PHP.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-aa4dfb4 e-con-full e-flex e-con e-child\" data-id=\"aa4dfb4\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d7fda4f elementor-widget elementor-widget-text-editor\" data-id=\"d7fda4f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Protect sensitive data and credentials<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5d35ad elementor-widget elementor-widget-text-editor\" data-id=\"d5d35ad\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Exposed database passwords, API keys, and access tokens can give attackers access to your application or sensitive data. Check your source code and Git history for these secrets. Tools like <a href=\"https:\/\/github.com\/gitleaks\/gitleaks\" target=\"_blank\" rel=\"noopener noreferrer\">Gitleaks<\/a> can help find them. Make sure <code>.env<\/code> files aren&#8217;t stored in Git or accessible over the web. Also review who can access secrets in CI\/CD pipelines, and check container images and application logs for sensitive information.<\/p>\n<p>Keep secrets in a secrets manager or another system with restricted access, rather than in application code. Limit who can view or change them, and give each application only the permissions it needs.<\/p>\n<p>If a credential is exposed, revoke or replace it and update the services that use it. Remove exposed copies, investigate whether someone used it without permission, and prevent secrets from appearing in future logs. Removing a secret from your code doesn&#8217;t disable it or erase it from old Git commits.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-99a4968 e-con-full cta2 e-flex e-con e-child\" data-id=\"99a4968\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-c8fb085 relative animated-circle-adaptive e-con-full e-flex e-con e-child\" data-id=\"c8fb085\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-6d2df0f e-con-full e-flex e-con e-child\" data-id=\"6d2df0f\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a222f5e elementor-widget-tablet__width-inherit elementor-widget elementor-widget-heading\" data-id=\"a222f5e\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\">Get an expert PHP security assessment<\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bd67a08 e-con-full e-flex e-con e-child\" data-id=\"bd67a08\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0eb8259 elementor-align-left elementor-widget__width-initial elementor-widget-mobile__width-inherit cta-btn elementor-widget elementor-widget-button\" data-id=\"0eb8259\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#contact-form\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Schedule a call<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-150ca8b elementor-absolute elementor-widget-mobile__width-inherit transform elementor-widget-tablet__width-inherit elementor-widget elementor-widget-html\" data-id=\"150ca8b\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"wave-container\"><\/div>\r\n\r\n<style>\r\n  .wave-container {\r\n    position: relative;\r\n    width: 320px;\r\n    height: 320px;\r\n  }\r\n\r\n  @media(max-width: 1279px) {\r\n    .wave-container {\r\n      width: 100%;\r\n      height: 100%;\r\n    }\r\n  }\r\n\r\n\r\n  .wave {\r\n    position: absolute;\r\n    border: 1px solid rgba(210, 184, 214, 1);\r\n    border-radius: 50%;\r\n    animation: drop 16s infinite;\r\n    top: 50%;\r\n    left: 50%;\r\n    transform: translate(-50%, -50%);\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  @keyframes drop {\r\n    0% {\r\n      width: 0px;\r\n      height: 0px;\r\n      border: 1px solid rgba(210, 184, 214, 1);\r\n    }\r\n    100% {\r\n      width: 400px;\r\n      height: 400px;\r\n      border: 1px solid rgba(210, 184, 214, 0);\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n\r\n  document.addEventListener('DOMContentLoaded', () => {\r\n    function createWaves(numberOfWaves) {\r\n      const waveContainers = document.querySelectorAll('.cta2 .wave-container');\r\n\r\n      waveContainers.forEach((waveContainer) => {\r\n        for (let i = 0; i < numberOfWaves; i++) {\r\n          const wave = document.createElement('div');\r\n          wave.classList.add('wave');\r\n\r\n          wave.style.animationDelay = `${i * 0.8}s`;\r\n\r\n          waveContainer.appendChild(wave);\r\n        }\r\n      });\r\n    }\r\n\r\n    createWaves(10)\r\n  });\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6a121bb e-con-full e-flex e-con e-child\" data-id=\"6a121bb\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-53a4632 elementor-widget elementor-widget-text-editor\" data-id=\"53a4632\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>How to prioritize, deploy, and verify PHP security fixes<\/h2>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eebe612 custom-roadmap elementor-widget elementor-widget-html\" data-id=\"eebe612\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"blog-roadmap\">\n\n    <div class=\"blog-roadmap-item\">\n        <div class=\"blog-roadmap-item__title\">\n            <div class=\"blog-roadmap-item__title__num-block\">\n                <span class=\"blog-roadmap-item__title__num-block__num\">01<\/span>\n                <img decoding=\"async\" class=\"blog-roadmap-item__title__num-block__arrow\" src=\"https:\/\/i.ibb.co\/t4Px1j6\/Rectangle-784-2.png\" \/ alt=\"\">\n            <\/div>\n            <span class=\"blog-roadmap-item__title__text-block\">Prioritize vulnerabilities<\/span>\n        <\/div>\n        <div class=\"blog-roadmap-item__content\">\n            <p>Prioritize systems exposed to attacks. Weigh CVSS alongside the PHP SAPI, internet exposure, existing protections, and business impact. Unpatched, internet-facing mod_php workloads need urgent attention, while other SAPIs still require assessment.<\/p>\n        <\/div>\n    <\/div>\n\n    <div class=\"blog-roadmap-item\">\n        <div class=\"blog-roadmap-item__title\">\n            <div class=\"blog-roadmap-item__title__num-block\">\n                <span class=\"blog-roadmap-item__title__num-block__num\">02<\/span>\n                <img decoding=\"async\" class=\"blog-roadmap-item__title__num-block__arrow\" src=\"https:\/\/i.ibb.co\/t4Px1j6\/Rectangle-784-2.png\" \/ alt=\"\">\n            <\/div>\n            <span class=\"blog-roadmap-item__title__text-block\">Deploy patches safely<\/span>\n        <\/div>\n        <div class=\"blog-roadmap-item__content\">\n            <p>Record affected applications, PHP worker pools, and container image digests. Test in staging and prepare a recovery plan before deployment. Patch affected packages or rebuild images, then restart or replace all affected workers. WAF rules and configuration mitigations may reduce exposure to specific exploit paths. They do not patch the vulnerable runtime.<\/p>\n        <\/div>\n    <\/div>\n\n    <div class=\"blog-roadmap-item\">\n        <div class=\"blog-roadmap-item__title\">\n            <div class=\"blog-roadmap-item__title__num-block\">\n                <span class=\"blog-roadmap-item__title__num-block__num\">03<\/span>\n                <img decoding=\"async\" class=\"blog-roadmap-item__title__num-block__arrow\" src=\"https:\/\/i.ibb.co\/t4Px1j6\/Rectangle-784-2.png\" \/ alt=\"\">\n            <\/div>\n            <span class=\"blog-roadmap-item__title__text-block\">Verify remediation<\/span>\n        <\/div>\n        <div class=\"blog-roadmap-item__content\">\n            <p>Check which PHP build serves live requests and confirm its patch status, including any vendor backport. Verify that affected workers have been restarted or replaced, run regression tests, and repeat the previously failed security check. Monitor production for errors after deployment.<\/p>\n        <\/div>\n    <\/div>\n\n    <div class=\"blog-roadmap-item\">\n        <div class=\"blog-roadmap-item__title\">\n            <div class=\"blog-roadmap-item__title__num-block\">\n                <span class=\"blog-roadmap-item__title__num-block__num\">04<\/span>\n                <img decoding=\"async\" class=\"blog-roadmap-item__title__num-block__arrow\" src=\"https:\/\/i.ibb.co\/t4Px1j6\/Rectangle-784-2.png\" \/ alt=\"\">\n            <\/div>\n            <span class=\"blog-roadmap-item__title__text-block\">Investigate possible compromise<\/span>\n        <\/div>\n        <div class=\"blog-roadmap-item__content\">\n            <p>Patching addresses the vulnerability. Any earlier compromise still requires investigation. Review server logs, worker crashes, unfamiliar files, and suspicious network activity. On mod_php, PHP2Shell may execute before application logging begins, so clean framework logs cannot rule out an attack. Escalate warning signs to incident response and preserve the evidence.<\/p>\n        <\/div>\n    <\/div>\n\n    <div class=\"blog-roadmap-item\">\n        <div class=\"blog-roadmap-item__title\">\n            <div class=\"blog-roadmap-item__title__num-block\">\n                <span class=\"blog-roadmap-item__title__num-block__num\">05<\/span>\n            <\/div>\n            <span class=\"blog-roadmap-item__title__text-block\">Maintain security<\/span>\n        <\/div>\n        <div class=\"blog-roadmap-item__content\">\n            <p>Track new PHP and dependency vulnerabilities, and add security checks to CI\/CD. Base regular assessments on application exposure and business risk, and reassess after major changes or critical disclosures.<\/p>\n        <\/div>\n    <\/div>\n\n<\/div>\n\n<div class=\"blog-roadmap-mobile\">\n\n    <div class=\"blog-roadmap-item-mobile active\">\n\n        <div class=\"blog-roadmap-item-mobile__side-arrow-wrapper\">\n            <img decoding=\"async\" class=\"side-arrow--open\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/01\/Line-404-2.svg\" alt=\"arrow-icon.\" \/>\n\n            <img decoding=\"async\" class=\"side-arrow--closed\" src=\"https:\/\/i.ibb.co\/t4Px1j6\/Rectangle-784-2.png\" alt=\"arrow-icon.\" \/>\n        <\/div>\n\n        <div class=\"blog-roadmap-item-mobile__main-wrapper\">\n            <div class=\"blog-roadmap-item-mobile__title\">\n                <span class=\"blog-roadmap-item-mobile__title__num\">01<\/span>\n                <span class=\"blog-roadmap-item-mobile__title__text\">Prioritize vulnerabilities<\/span>\n            <\/div>\n            <div class=\"blog-roadmap-item-mobile__content\">\n                <p>Prioritize systems exposed to attacks. Weigh CVSS alongside the PHP SAPI, internet exposure, existing protections, and business impact. Unpatched, internet-facing mod_php workloads need urgent attention, while other SAPIs still require assessment.<\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"blog-roadmap-item-mobile\">\n\n        <div class=\"blog-roadmap-item-mobile__side-arrow-wrapper\">\n            <img decoding=\"async\" class=\"side-arrow--open\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/01\/Line-404-2.svg\" alt=\"arrow-icon.\" \/>\n\n            <img decoding=\"async\" class=\"side-arrow--closed\" src=\"https:\/\/i.ibb.co\/t4Px1j6\/Rectangle-784-2.png\" alt=\"arrow-icon.\" \/>\n        <\/div>\n\n        <div class=\"blog-roadmap-item-mobile__main-wrapper\">\n            <div class=\"blog-roadmap-item-mobile__title\">\n                <span class=\"blog-roadmap-item-mobile__title__num\">02<\/span>\n                <span class=\"blog-roadmap-item-mobile__title__text\">Deploy patches safely<\/span>\n            <\/div>\n            <div class=\"blog-roadmap-item-mobile__content\">\n                <p>Record affected applications, PHP worker pools, and container image digests. Test in staging and prepare a recovery plan before deployment. Patch affected packages or rebuild images, then restart or replace all affected workers. WAF rules and configuration mitigations may reduce exposure to specific exploit paths. They do not patch the vulnerable runtime.<\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"blog-roadmap-item-mobile\">\n\n        <div class=\"blog-roadmap-item-mobile__side-arrow-wrapper\">\n            <img decoding=\"async\" class=\"side-arrow--open\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/01\/Line-404-2.svg\" alt=\"arrow-icon.\" \/>\n\n            <img decoding=\"async\" class=\"side-arrow--closed\" src=\"https:\/\/i.ibb.co\/t4Px1j6\/Rectangle-784-2.png\" alt=\"arrow-icon.\" \/>\n        <\/div>\n\n        <div class=\"blog-roadmap-item-mobile__main-wrapper\">\n            <div class=\"blog-roadmap-item-mobile__title\">\n                <span class=\"blog-roadmap-item-mobile__title__num\">03<\/span>\n                <span class=\"blog-roadmap-item-mobile__title__text\">Verify remediation<\/span>\n            <\/div>\n            <div class=\"blog-roadmap-item-mobile__content\">\n                <p>Check which PHP build serves live requests and confirm its patch status, including any vendor backport. Verify that affected workers have been restarted or replaced, run regression tests, and repeat the previously failed security check. Monitor production for errors after deployment.<\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"blog-roadmap-item-mobile\">\n\n        <div class=\"blog-roadmap-item-mobile__side-arrow-wrapper\">\n            <img decoding=\"async\" class=\"side-arrow--open\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/01\/Line-404-2.svg\" alt=\"arrow-icon.\" \/>\n\n            <img decoding=\"async\" class=\"side-arrow--closed\" src=\"https:\/\/i.ibb.co\/t4Px1j6\/Rectangle-784-2.png\" alt=\"arrow-icon.\" \/>\n        <\/div>\n\n        <div class=\"blog-roadmap-item-mobile__main-wrapper\">\n            <div class=\"blog-roadmap-item-mobile__title\">\n                <span class=\"blog-roadmap-item-mobile__title__num\">04<\/span>\n                <span class=\"blog-roadmap-item-mobile__title__text\">Investigate possible compromise<\/span>\n            <\/div>\n            <div class=\"blog-roadmap-item-mobile__content\">\n                <p>Patching addresses the vulnerability. Any earlier compromise still requires investigation. Review server logs, worker crashes, unfamiliar files, and suspicious network activity. On mod_php, PHP2Shell may execute before application logging begins, so clean framework logs cannot rule out an attack. Escalate warning signs to incident response and preserve the evidence.<\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"blog-roadmap-item-mobile\">\n        <div class=\"blog-roadmap-item-mobile__side-arrow-wrapper\">\n            <img decoding=\"async\" class=\"side-arrow--open\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2025\/01\/Line-404-2.svg\" alt=\"arrow-icon.\" \/>\n\n            <img decoding=\"async\" class=\"side-arrow--closed\" src=\"https:\/\/i.ibb.co\/t4Px1j6\/Rectangle-784-2.png\" alt=\"arrow-icon.\" \/>\n        <\/div>\n\n        <div class=\"blog-roadmap-item-mobile__main-wrapper\">\n            <div class=\"blog-roadmap-item-mobile__title\">\n                <span class=\"blog-roadmap-item-mobile__title__num\">05<\/span>\n                <span class=\"blog-roadmap-item-mobile__title__text\">Maintain security<\/span>\n            <\/div>\n            <div class=\"blog-roadmap-item-mobile__content\">\n                <p>Track new PHP and dependency vulnerabilities, and add security checks to CI\/CD. Base regular assessments on application exposure and business risk, and reassess after major changes or critical disclosures.<\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n\n<\/div>\n\n<script>\n\n    document.addEventListener('DOMContentLoaded', () => {\n        const mobileRoadmapItems = [...document.querySelectorAll('.blog-roadmap-item-mobile')];\n\n        mobileRoadmapItems.forEach(item => {\n\n            item.addEventListener('click', () => {\n                const isActive = item.classList.contains('active');\n\n                \/\/ Collapse all items\n                mobileRoadmapItems.forEach(nav => {\n                    nav.classList.remove('active');\n                    \/*const ul = nav.querySelector('.mobile-domain-list');\n                    if (ul) ul.style.maxHeight = '0';*\/\n                });\n\n                \/\/ Expand clicked item only if it was not active\n                if (!isActive) {\n                    item.classList.add('active');\n                    \/*const ul = item.querySelector('.mobile-domain-list');\n                    if (ul) ul.style.maxHeight = \"unset\"; \/\/ul.scrollHeight + 'px';*\/\n                }\n            });\n\n        });\n    });\n\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7d6c4b9 e-con-full e-flex e-con e-child\" data-id=\"7d6c4b9\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7a7950d elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"7a7950d\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Worked example: a production patch that looks successful but is not<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2e95f04 elementor-widget elementor-widget-text-editor\" data-id=\"2e95f04\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A Symfony shop runs PHP 8.3 behind nginx and PHP-FPM. The administrator updates the OS packages and runs php -v. The command shows a patched version, so everything looks fine. But php -v checks only the command-line PHP binary.<\/p><p>Customer requests still go through nginx to PHP-FPM workers that started before the update. Background jobs also run in a separate container with a vulnerable PHP base layer. The packages may be updated on the server, but these workloads are still running the old code.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f932a7f elementor-widget elementor-widget-image\" data-id=\"f932a7f\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1000\" height=\"622\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/11\/php-runtime-verification-by-workload.png\" class=\"attachment-full size-full wp-image-202657\" alt=\"PHP build checks for web, workers, and CLI.\" srcset=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/11\/php-runtime-verification-by-workload.png 1000w, https:\/\/innowise.com\/wp-content\/uploads\/2026\/11\/php-runtime-verification-by-workload-300x187.png 300w, https:\/\/innowise.com\/wp-content\/uploads\/2026\/11\/php-runtime-verification-by-workload-768x478.png 768w, https:\/\/innowise.com\/wp-content\/uploads\/2026\/11\/php-runtime-verification-by-workload-18x12.png 18w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2d03078 elementor-widget elementor-widget-text-editor\" data-id=\"2d03078\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>To finish the patch, the team needs to identify every affected application and worker pool, restart the FPM workers, and redeploy the queue container with a patched image. They must then verify that the running PHP processes use fixed builds or verified vendor backports.<\/p><p>Test checkout and file uploads in staging, run production smoke tests, and repeat the security checks that previously failed. The deployment record should include the PHP SAPI serving web traffic, verified package versions or image digests, restart and test evidence, and the owner.<\/p><p>A passing composer audit isn&#8217;t proof that PHP2Shell has been fixed. That command checks dependencies, not the PHP interpreter handling web requests.<\/p><p>Review the PHP worker&#8217;s user ID, writable directories, mounted secrets, database permissions, and outbound network access. These determine whether an attacker could modify application files, read credentials, or reach other systems. Least privilege and network segmentation may limit the damage if a worker is compromised, but patching the interpreter remains necessary.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c3dc7ee e-con-full e-flex e-con e-child\" data-id=\"c3dc7ee\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b88070b elementor-widget elementor-widget-shortcode\" data-id=\"b88070b\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"quote_shortcode-container\">\n                <div class=\"quote_shortcode-text\">\n            php -v shows the command-line PHP version, but it can\u2019t confirm which interpreter serves production traffic or whether long-running workers are still using the vulnerable build. With PHP2Shell, we verify the active runtime first, then review dependencies and application code. We consider remediation complete only after confirming that the patched version is actually handling production requests.        <\/div>\n                <div class=\"quote_shortcode-bottom\">\n                            <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/03\/Stanislav-Kazanov-1.png\" alt=\"Stanislav Kazanov, Head of GRC and Cybersecurity.\" class=\"quote_shortcode-img\">\n                        <div class=\"quote_shortcode-right\">\n                <a href=\"https:\/\/innowise.com\/de\/authors\/stanislav-kazanov\/\" class=\"quote_shortcode-name\">\n                    Stanislav Kazanov                <\/a>\n                                <div class=\"quote_shortcode-position\">\n                    Head of GRC, Cybersecurity &amp; Sustainability                <\/div>\n                            <\/div>\n        <\/div>\n    <\/div>\n\n    <style>\n        .quote_shortcode-container{\n            background: #F6FAFE;\n            border: 1px solid #9CC6ED;\n            padding:60px;\n        }\n        .quote_shortcode-text{\n            font-family: Karla;\n            font-weight: 400;\n            font-style: Italic;\n            font-size: 22px;\n            line-height: 150%;\n            color:#2E2E2E;\n            margin-bottom:30px;\n        }\n        .quote_shortcode-bottom{\n            display:flex;\n            align-items:center;\n            gap:30px;\n        }\n        .quote_shortcode-container img.quote_shortcode-img{\n            width:80px;\n            height:80px;\n            max-width:80px;\n            border-radius:50%;\n            object-fit:cover;\n            display:block;\n        }\n        .quote_shortcode-right{\n\n        }   \n        .quote_shortcode-name{\n            font-family: Karla;\n            font-weight: 700;\n            font-size: 22px;\n            line-height: 32px;\n            margin-bottom:4px;\n            color:#2E2E2E;\n            transition:0.5s;\n            text-decoration:none!important;\n        }\n        .quote_shortcode-name:hover{\n            color:#C63031;\n            text-decoration:underline!important;\n        }\n        .quote_shortcode-position{\n            font-family: Karla;\n            font-weight: 400;\n            font-size: 18px;\n            line-height: 150%;\n            color:#585858;\n        }\n        @media(max-width:1280px){\n            .quote_shortcode-container{\n                padding:40px;\n            }\n        }\n        @media(max-width:768px){\n            .quote_shortcode-container{\n                padding:20px;\n            }\n            .quote_shortcode-text{\n                font-size:16px;\n                margin-bottom:20px;\n            }\n            .quote_shortcode-container img.quote_shortcode-img{\n                width:60px;\n                height:60px;\n                max-width:60px;\n            }\n            .quote_shortcode-name{\n                font-size:16px;\n            }\n            .quote_shortcode-position{\n                font-size:14px;\n            }\n        }\n    <\/style>\n\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-775e7b7 e-con-full e-flex e-con e-child\" data-id=\"775e7b7\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-05cf643 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"05cf643\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">How Innowise can help secure your PHP applications<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0fa4023 translation-block elementor-widget elementor-widget-text-editor\" data-id=\"0fa4023\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>At Innowise, we bring PHP development and security expertise together. Our 100+ PHP developers have delivered over 250 projects, and our 50+ cybersecurity engineers help identify and address vulnerabilities. Our work is also backed by ISO\/IEC 27001:2022 and ISO 9001:2015 certifications.<\/p><p>We check your PHP applications for security issues, including vulnerable dependencies and outdated components. Our developers handle the necessary fixes and upgrades, while security engineers test the changes before release. If you&#8217;re unsure where to start, our <a href=\"https:\/\/innowise.com\/services\/cybersecurity\/it-security-consulting\/\">IT security consulting team<\/a> can assess the risks and help prioritize the work.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bf25bfc e-con-full e-flex e-con e-child\" data-id=\"bf25bfc\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-971b7e3 elementor-widget-tablet__width-initial elementor-widget elementor-widget-image\" data-id=\"971b7e3\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/10\/ISO-27001-color-1.svg\" class=\"attachment-large size-large wp-image-202497\" alt=\"ISO 27001 icon.\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b7d0ffa elementor-widget-tablet__width-initial elementor-widget elementor-widget-image\" data-id=\"b7d0ffa\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/10\/ISO-27017-1.svg\" class=\"attachment-large size-large wp-image-201997\" alt=\"ISO-27017-2015.\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-50bc091 elementor-widget-mobile__width-initial elementor-widget elementor-widget-image\" data-id=\"50bc091\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/05\/ISO-27018.svg\" class=\"attachment-large size-large wp-image-197610\" alt=\"ISO-27018 icon.\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f7412ee elementor-widget-mobile__width-initial elementor-widget elementor-widget-image\" data-id=\"f7412ee\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/10\/ISO-9001-color-1.svg\" class=\"attachment-large size-large wp-image-202496\" alt=\"ISO 9001 icon.\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9376aa0 e-con-full e-flex e-con e-child\" data-id=\"9376aa0\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5dec165 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"5dec165\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Our PHP projects<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e3de39 blog-case elementor-widget elementor-widget-shortcode\" data-id=\"5e3de39\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <div class=\"case-slider-v2-wrap case-slider-v2-wrap-blog\">\n        <div class=\"case-slider-v2\">\n            <div class=\"swiper\">\n                <div class=\"swiper-wrapper\">\n                            <div class=\"swiper-slide\">\n            <div class=\"case-slider-v2-card\">\n                <div class=\"case-slider-v2-card-left\">\n                    <div class=\"case-slider-v2-card-left-cont\">\n                        <div class=\"case-slider-v2-card-logo\">\n                                                            <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/10\/Medspa-logo.svg\" alt=\"MedSpa Network website redesign and rebuild.\">\n                                                                                        <a href=\"\/de\/cases\/gesundheitswesen\/\" class=\"\">Healthcare<\/a>\n                                                    <\/div>\n                        <div class=\"case-slider-v2-card-title\">\n                            MedSpa Network website redesign and rebuild                        <\/div>\n                                                <div class=\"case-slider-v2-card-text\">\n                            Innowise rebuilt MedSpa Network\u2019s website on WordPress, giving its team control over day-to-day content updates.                        <\/div>\n                                                                        <div class=\"case-slider-v2-card-n-blocks\">\n                                                        <div class=\"case-slider-v2-card-n-block\">\n                                                                <b>2<\/b>\n                                                                                                <span>months from kickoff to launch<\/span>\n                                                            <\/div>\n                                                        <div class=\"case-slider-v2-card-n-block\">\n                                                                <b>3-5<\/b>\n                                                                                                <span>leads per week up from 1 per month<\/span>\n                                                            <\/div>\n                                                    <\/div>\n                                            <\/div>\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/medspa-network-website-rebild\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                                <div class=\"case-slider-v2-card-a\" role=\"button\" tabindex=\"0\">Client review<\/div>\n                                            <\/div>\n                <\/div>\n                <div class=\"case-slider-v2-card-right\">\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/medspa-network-website-rebild\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                                <div class=\"case-slider-v2-card-a\" role=\"button\" tabindex=\"0\">\n                            <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/10\/icon.svg\" alt=\"Client review logo.\">\n                            Client review\n                            \n                        <\/div>\n                                            <\/div>\n                                        <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/10\/MedSpa-Network-Website-Redesign.png\" alt=\"MedSpa Network website redesign and rebuild.\">\n                                        \n                <\/div>\n                                <div class=\"case-slider-v2-pdf-source\" hidden>\n                        <div id=\"pdf_6aee4ee794dcd\" class=\"js-pdf-viewer\" data-pdf-url=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/10\/Referral-Letter_MedSpa-Network.pdf\"><\/div>\n    \n    <script>\n    (function() {\n        function waitForPDF(callback) {\n            if (typeof pdfjsLib !== 'undefined') {\n                callback();\n            } else {\n                setTimeout(function() { waitForPDF(callback); }, 100);\n            }\n        }\n        \n        waitForPDF(function() {\n            var container = document.getElementById('pdf_6aee4ee794dcd');\n            var pdfUrl = container.getAttribute('data-pdf-url');\n            \n            pdfjsLib.GlobalWorkerOptions.workerSrc = 'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/2.16.105\/pdf.worker.min.js';\n            \n            pdfjsLib.getDocument(pdfUrl).promise.then(function(pdf) {\n                var renderPage = function(pageNum) {\n                    return pdf.getPage(pageNum).then(function(page) {\n                        var canvas = document.createElement('canvas');\n                        canvas.style.width = '100%';\n                        canvas.style.display = 'block';\n                        container.appendChild(canvas);\n\n                        var viewport = page.getViewport({ scale: 1.5 });\n                        canvas.width = viewport.width;\n                        canvas.height = viewport.height;\n\n                        return page.render({\n                            canvasContext: canvas.getContext('2d'),\n                            viewport: viewport\n                        }).promise;\n                    });\n                };\n\n                var chain = Promise.resolve();\n                for (var i = 1; i <= pdf.numPages; i++) {\n                    (function(pageNum) {\n                        chain = chain.then(function() {\n                            return renderPage(pageNum);\n                        });\n                    })(i);\n                }\n            });\n        });\n    })();\n    <\/script>\n                    <\/div>\n                            <\/div>\n            <\/div>\n                            <div class=\"swiper-slide\">\n            <div class=\"case-slider-v2-card\">\n                <div class=\"case-slider-v2-card-left\">\n                    <div class=\"case-slider-v2-card-left-cont\">\n                        <div class=\"case-slider-v2-card-logo\">\n                                                            <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/10\/TBCBank-logo.svg\" alt=\"AI bot for TBC Bank marketing campaign.\">\n                                                                                        <a href=\"\/de\/cases\/ai\/\" class=\"\">AI<\/a>\n                                                    <\/div>\n                        <div class=\"case-slider-v2-card-title\">\n                            AI bot for TBC Bank marketing campaign                        <\/div>\n                                                <div class=\"case-slider-v2-card-text\">\n                            Innowise built a bilingual Telegram bot that generates AI selfies with TBC Bank&#039;s football-star brand ambassador.                        <\/div>\n                                                                        <div class=\"case-slider-v2-card-n-blocks\">\n                                                        <div class=\"case-slider-v2-card-n-block\">\n                                                                <b>3,000<\/b>\n                                                                                                <span>users engaged<\/span>\n                                                            <\/div>\n                                                        <div class=\"case-slider-v2-card-n-block\">\n                                                                <b>2<\/b>\n                                                                                                <span>languages supported<\/span>\n                                                            <\/div>\n                                                    <\/div>\n                                            <\/div>\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/ai-telegram-bot\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                                <div class=\"case-slider-v2-card-a\" role=\"button\" tabindex=\"0\">Client review<\/div>\n                                            <\/div>\n                <\/div>\n                <div class=\"case-slider-v2-card-right\">\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/ai-telegram-bot\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                                <div class=\"case-slider-v2-card-a\" role=\"button\" tabindex=\"0\">\n                            <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/10\/icon.svg\" alt=\"Client review logo.\">\n                            Client review\n                            \n                        <\/div>\n                                            <\/div>\n                                        <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/10\/ai-telegram-bot.jpg\" alt=\"AI Telegram bot..\">\n                                        \n                <\/div>\n                                <div class=\"case-slider-v2-pdf-source\" hidden>\n                        <div id=\"pdf_6aee4ee7953c0\" class=\"js-pdf-viewer\" data-pdf-url=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/08\/30.06.2026-Reference-letter-from-TBC-BANK-.pdf\"><\/div>\n    \n    <script>\n    (function() {\n        function waitForPDF(callback) {\n            if (typeof pdfjsLib !== 'undefined') {\n                callback();\n            } else {\n                setTimeout(function() { waitForPDF(callback); }, 100);\n            }\n        }\n        \n        waitForPDF(function() {\n            var container = document.getElementById('pdf_6aee4ee7953c0');\n            var pdfUrl = container.getAttribute('data-pdf-url');\n            \n            pdfjsLib.GlobalWorkerOptions.workerSrc = 'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/2.16.105\/pdf.worker.min.js';\n            \n            pdfjsLib.getDocument(pdfUrl).promise.then(function(pdf) {\n                var renderPage = function(pageNum) {\n                    return pdf.getPage(pageNum).then(function(page) {\n                        var canvas = document.createElement('canvas');\n                        canvas.style.width = '100%';\n                        canvas.style.display = 'block';\n                        container.appendChild(canvas);\n\n                        var viewport = page.getViewport({ scale: 1.5 });\n                        canvas.width = viewport.width;\n                        canvas.height = viewport.height;\n\n                        return page.render({\n                            canvasContext: canvas.getContext('2d'),\n                            viewport: viewport\n                        }).promise;\n                    });\n                };\n\n                var chain = Promise.resolve();\n                for (var i = 1; i <= pdf.numPages; i++) {\n                    (function(pageNum) {\n                        chain = chain.then(function() {\n                            return renderPage(pageNum);\n                        });\n                    })(i);\n                }\n            });\n        });\n    })();\n    <\/script>\n                    <\/div>\n                            <\/div>\n            <\/div>\n                            <div class=\"swiper-slide\">\n            <div class=\"case-slider-v2-card\">\n                <div class=\"case-slider-v2-card-left\">\n                    <div class=\"case-slider-v2-card-left-cont\">\n                        <div class=\"case-slider-v2-card-logo\">\n                                                                                        <a href=\"\/de\/cases\/ecommerce\/\" class=\"only\">E-commerce<\/a>\n                                                    <\/div>\n                        <div class=\"case-slider-v2-card-title\">\n                            Defining the product strategy for Bitlendex&#8217;s bitcoin lending platform                        <\/div>\n                                                <div class=\"case-slider-v2-card-text\">\n                            Innowise conducted a discovery phase for Bitlendex, helping the client transform an early-stage product concept into a validated business model and clearly defined MVP.                        <\/div>\n                                                                        <div class=\"case-slider-v2-card-n-blocks\">\n                                                        <div class=\"case-slider-v2-card-n-block\">\n                                                                <b>1 month<\/b>\n                                                                                                <span>for a full discovery phase<\/span>\n                                                            <\/div>\n                                                    <\/div>\n                                            <\/div>\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/product-discovery-for-bitcoin-lending-platform\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                            <\/div>\n                <\/div>\n                <div class=\"case-slider-v2-card-right\">\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/product-discovery-for-bitcoin-lending-platform\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                            <\/div>\n                                        <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/10\/Product-Discovery-for-Bitcoin-Lending-Platform-Innowise.png\" alt=\"Defining the product strategy for Bitlendex&#8217;s bitcoin lending platform.\">\n                                        \n                <\/div>\n                            <\/div>\n            <\/div>\n                            <div class=\"swiper-slide\">\n            <div class=\"case-slider-v2-card\">\n                <div class=\"case-slider-v2-card-left\">\n                    <div class=\"case-slider-v2-card-left-cont\">\n                        <div class=\"case-slider-v2-card-logo\">\n                                                            <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/09\/Bonnfinanz-logo-1.svg\" alt=\"Financial advisory system for Bonnfinanz.\">\n                                                                                        <a href=\"\/de\/cases\/fintech\/\" class=\"\">FinTech<\/a>\n                                                    <\/div>\n                        <div class=\"case-slider-v2-card-title\">\n                            Financial advisory system for Bonnfinanz                        <\/div>\n                                                <div class=\"case-slider-v2-card-text\">\n                            Innowise helped Bonnfinanz to build a web-based advisory and administration system that supports mobile working and direct interaction with the client.                        <\/div>\n                                                                    <\/div>\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/financial-advisory-system\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                            <\/div>\n                <\/div>\n                <div class=\"case-slider-v2-card-right\">\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/financial-advisory-system\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                            <\/div>\n                                        <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/09\/image-3-1.jpg\" alt=\"Financial advisory system for Bonnfinanz..\">\n                                        \n                <\/div>\n                            <\/div>\n            <\/div>\n                            <div class=\"swiper-slide\">\n            <div class=\"case-slider-v2-card\">\n                <div class=\"case-slider-v2-card-left\">\n                    <div class=\"case-slider-v2-card-left-cont\">\n                        <div class=\"case-slider-v2-card-logo\">\n                                                            <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/09\/smartlab-logo-2.svg\" alt=\"EV charging platform with flexible billing.\">\n                                                                                        <a href=\"\/de\/cases\/transport\/\" class=\"\">Transportation<\/a>\n                                                    <\/div>\n                        <div class=\"case-slider-v2-card-title\">\n                            EV charging platform with flexible billing                        <\/div>\n                                                <div class=\"case-slider-v2-card-text\">\n                            Innowise helped modernize SMART\/LAB\u2019s e-mobility platform by enhancing its billing, payment, transaction management, and reporting capabilities.                        <\/div>\n                                                                        <div class=\"case-slider-v2-card-n-blocks\">\n                                                        <div class=\"case-slider-v2-card-n-block\">\n                                                                <b>&gt;50%<\/b>\n                                                                                                <span>faster billing and payment processing<\/span>\n                                                            <\/div>\n                                                    <\/div>\n                                            <\/div>\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/ev-charging-platform-modernization\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                            <\/div>\n                <\/div>\n                <div class=\"case-slider-v2-card-right\">\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/ev-charging-platform-modernization\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                            <\/div>\n                                        <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/09\/image.jpg\" alt=\"EV charging platform with flexible billing.\">\n                                        \n                <\/div>\n                            <\/div>\n            <\/div>\n                            <div class=\"swiper-slide\">\n            <div class=\"case-slider-v2-card\">\n                <div class=\"case-slider-v2-card-left\">\n                    <div class=\"case-slider-v2-card-left-cont\">\n                        <div class=\"case-slider-v2-card-logo\">\n                                                            <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/09\/finXP-logo-2.svg\" alt=\"FinXP\u2019s cloud-native DevOps transformation.\">\n                                                                                        <a href=\"\/de\/cases\/fintech\/\" class=\"\">FinTech<\/a>\n                                                    <\/div>\n                        <div class=\"case-slider-v2-card-title\">\n                            FinXP\u2019s cloud-native DevOps transformation                        <\/div>\n                                                <div class=\"case-slider-v2-card-text\">\n                            Innowise helped FinXP modernize its financial services infrastructure by migrating legacy PHP-based APIs and applications to a cloud-native architecture.                        <\/div>\n                                                                        <div class=\"case-slider-v2-card-n-blocks\">\n                                                        <div class=\"case-slider-v2-card-n-block\">\n                                                                <b>11<\/b>\n                                                                                                <span>apps moved to Azure App Service<\/span>\n                                                            <\/div>\n                                                        <div class=\"case-slider-v2-card-n-block\">\n                                                                <b>100%<\/b>\n                                                                                                <span>Infrastructure as Code<\/span>\n                                                            <\/div>\n                                                    <\/div>\n                                            <\/div>\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/fintech-azure-devops-cloud-infrastructure-modernization\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                            <\/div>\n                <\/div>\n                <div class=\"case-slider-v2-card-right\">\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/fintech-azure-devops-cloud-infrastructure-modernization\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                            <\/div>\n                                        <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/09\/image-1.jpg\" alt=\"FinXP\u2019s cloud-native DevOps transformation.\">\n                                        \n                <\/div>\n                            <\/div>\n            <\/div>\n                            <div class=\"swiper-slide\">\n            <div class=\"case-slider-v2-card\">\n                <div class=\"case-slider-v2-card-left\">\n                    <div class=\"case-slider-v2-card-left-cont\">\n                        <div class=\"case-slider-v2-card-logo\">\n                                                            <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/08\/Logo-for-review-2.svg\" alt=\"Technical SEO for e-commerce platform.\">\n                                                                                        <a href=\"\/de\/cases\/ecommerce\/\" class=\"\">E-commerce<\/a>\n                                                    <\/div>\n                        <div class=\"case-slider-v2-card-title\">\n                            Technical SEO for e-commerce platform                        <\/div>\n                                                <div class=\"case-slider-v2-card-text\">\n                            Innowise addressed critical technical SEO and performance issues across Officine 08\u2019s e-commerce platform.                        <\/div>\n                                                                        <div class=\"case-slider-v2-card-n-blocks\">\n                                                        <div class=\"case-slider-v2-card-n-block\">\n                                                                <b>&lt;500 ms<\/b>\n                                                                                                <span>server response time<\/span>\n                                                            <\/div>\n                                                        <div class=\"case-slider-v2-card-n-block\">\n                                                                <b>5<\/b>\n                                                                                                <span>months to complete the project<\/span>\n                                                            <\/div>\n                                                    <\/div>\n                                            <\/div>\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/e-commerce-technical-seo\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                                <div class=\"case-slider-v2-card-a\" role=\"button\" tabindex=\"0\">Client review<\/div>\n                                            <\/div>\n                <\/div>\n                <div class=\"case-slider-v2-card-right\">\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/e-commerce-technical-seo\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                                <div class=\"case-slider-v2-card-a\" role=\"button\" tabindex=\"0\">\n                            <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/10\/icon.svg\" alt=\"Client review logo.\">\n                            Client review\n                            \n                        <\/div>\n                                            <\/div>\n                                        <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/08\/image-teaser-1.png\" alt=\"Technical SEO for e-commerce platform.\">\n                                        \n                <\/div>\n                                <div class=\"case-slider-v2-pdf-source\" hidden>\n                        <div id=\"pdf_6aee4ee796300\" class=\"js-pdf-viewer\" data-pdf-url=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/09\/2026.08.20-Reference-letter-from-Officine-08.pdf\"><\/div>\n    \n    <script>\n    (function() {\n        function waitForPDF(callback) {\n            if (typeof pdfjsLib !== 'undefined') {\n                callback();\n            } else {\n                setTimeout(function() { waitForPDF(callback); }, 100);\n            }\n        }\n        \n        waitForPDF(function() {\n            var container = document.getElementById('pdf_6aee4ee796300');\n            var pdfUrl = container.getAttribute('data-pdf-url');\n            \n            pdfjsLib.GlobalWorkerOptions.workerSrc = 'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/2.16.105\/pdf.worker.min.js';\n            \n            pdfjsLib.getDocument(pdfUrl).promise.then(function(pdf) {\n                var renderPage = function(pageNum) {\n                    return pdf.getPage(pageNum).then(function(page) {\n                        var canvas = document.createElement('canvas');\n                        canvas.style.width = '100%';\n                        canvas.style.display = 'block';\n                        container.appendChild(canvas);\n\n                        var viewport = page.getViewport({ scale: 1.5 });\n                        canvas.width = viewport.width;\n                        canvas.height = viewport.height;\n\n                        return page.render({\n                            canvasContext: canvas.getContext('2d'),\n                            viewport: viewport\n                        }).promise;\n                    });\n                };\n\n                var chain = Promise.resolve();\n                for (var i = 1; i <= pdf.numPages; i++) {\n                    (function(pageNum) {\n                        chain = chain.then(function() {\n                            return renderPage(pageNum);\n                        });\n                    })(i);\n                }\n            });\n        });\n    })();\n    <\/script>\n                    <\/div>\n                            <\/div>\n            <\/div>\n                            <div class=\"swiper-slide\">\n            <div class=\"case-slider-v2-card\">\n                <div class=\"case-slider-v2-card-left\">\n                    <div class=\"case-slider-v2-card-left-cont\">\n                        <div class=\"case-slider-v2-card-logo\">\n                                                            <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/08\/Logo-for-review-1.svg\" alt=\"Continuous development of a fragrance subscription platform.\">\n                                                                                        <a href=\"\/de\/cases\/ecommerce\/\" class=\"\">E-commerce<\/a>\n                                                    <\/div>\n                        <div class=\"case-slider-v2-card-title\">\n                            Continuous development of a fragrance subscription platform                        <\/div>\n                                                <div class=\"case-slider-v2-card-text\">\n                            Innowise helped Scentbird expand its subscription platform to support new shopping experiences and international growth.                        <\/div>\n                                                                        <div class=\"case-slider-v2-card-n-blocks\">\n                                                        <div class=\"case-slider-v2-card-n-block\">\n                                                                <b>4<\/b>\n                                                                                                <span>years of continuous support<\/span>\n                                                            <\/div>\n                                                    <\/div>\n                                            <\/div>\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/perfume-subscription-platform-scaling\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                                <div class=\"case-slider-v2-card-a\" role=\"button\" tabindex=\"0\">Client review<\/div>\n                                            <\/div>\n                <\/div>\n                <div class=\"case-slider-v2-card-right\">\n                    <div class=\"case-slider-v2-card-buttons\">\n                        <a href=\"https:\/\/innowise.com\/de\/case\/perfume-subscription-platform-scaling\/\" class=\"case-slider-v2-card-button\">View case study<\/a>\n                                                <div class=\"case-slider-v2-card-a\" role=\"button\" tabindex=\"0\">\n                            <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/10\/icon.svg\" alt=\"Client review logo.\">\n                            Client review\n                            \n                        <\/div>\n                                            <\/div>\n                                        <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/08\/image-teaser.png\" alt=\"Continuous development of a fragrance subscription platform.\">\n                                        \n                <\/div>\n                                <div class=\"case-slider-v2-pdf-source\" hidden>\n                        <div id=\"pdf_6aee4ee796555\" class=\"js-pdf-viewer\" data-pdf-url=\"https:\/\/innowise.com\/wp-content\/uploads\/2026\/08\/2026.08.07-Reference-letter-from-Scentbird.pdf\"><\/div>\n    \n    <script>\n    (function() {\n        function waitForPDF(callback) {\n            if (typeof pdfjsLib !== 'undefined') {\n                callback();\n            } else {\n                setTimeout(function() { waitForPDF(callback); }, 100);\n            }\n        }\n        \n        waitForPDF(function() {\n            var container = document.getElementById('pdf_6aee4ee796555');\n            var pdfUrl = container.getAttribute('data-pdf-url');\n            \n            pdfjsLib.GlobalWorkerOptions.workerSrc = 'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/2.16.105\/pdf.worker.min.js';\n            \n            pdfjsLib.getDocument(pdfUrl).promise.then(function(pdf) {\n                var renderPage = function(pageNum) {\n                    return pdf.getPage(pageNum).then(function(page) {\n                        var canvas = document.createElement('canvas');\n                        canvas.style.width = '100%';\n                        canvas.style.display = 'block';\n                        container.appendChild(canvas);\n\n                        var viewport = page.getViewport({ scale: 1.5 });\n                        canvas.width = viewport.width;\n                        canvas.height = viewport.height;\n\n                        return page.render({\n                            canvasContext: canvas.getContext('2d'),\n                            viewport: viewport\n                        }).promise;\n                    });\n                };\n\n                var chain = Promise.resolve();\n                for (var i = 1; i <= pdf.numPages; i++) {\n                    (function(pageNum) {\n                        chain = chain.then(function() {\n                            return renderPage(pageNum);\n                        });\n                    })(i);\n                }\n            });\n        });\n    })();\n    <\/script>\n                    <\/div>\n                            <\/div>\n            <\/div>\n                                <\/div>\n            <\/div>\n            <div class=\"swiper-pagination-cont\">\n                <button class=\"case-slider-v2-nav case-slider-v2-nav-prev\" type=\"button\" aria-label=\"Previous slide\">\n                    <svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                        <path d=\"M12 4L4 12L12 20\" stroke=\"#2E2E2E\" stroke-width=\"2\"\/>\n                        <path d=\"M21 12.0002L4 12.0002\" stroke=\"#2E2E2E\" stroke-width=\"2\"\/>\n                    <\/svg>\n                <\/button>\n                <div class=\"swiper-pagination-counter\">\n                    <span class=\"swiper-pagination-counter-current\">01<\/span>\n                    \/\n                    <span class=\"swiper-pagination-counter-total\">01<\/span>\n                <\/div>\n                <button class=\"case-slider-v2-nav case-slider-v2-nav-next\" type=\"button\" aria-label=\"Next slide\">\n                    <svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                        <path d=\"M13 4L21 12L13 20\" stroke=\"#2E2E2E\" stroke-width=\"2\"\/>\n                        <path d=\"M4 12.0002L21 12.0002\" stroke=\"#2E2E2E\" stroke-width=\"2\"\/>\n                    <\/svg>\n                <\/button>\n                <div class=\"swiper-pagination\"><\/div>\n            <\/div>\n            \n        <\/div>\n                <div class=\"case-slider-v2-popup-pdf\">\n            <div class=\"case-slider-v2-popup-pdf-cont\">\n                <img decoding=\"async\" src=\"https:\/\/innowise.com\/wp-content\/themes\/hello-elementor\/assets\/images\/close_popup.svg\" alt=\"Close popup icon\" class=\"case-slider-v2-popup-pdf-close\">\n                <div class=\"case-slider-v2-popup-pdf-frame\"><\/div>\n            <\/div>\n        <\/div>\n            <\/div>\n\t\n    <script>\n        (function () {\n            const initCaseSliderV2 = () => {\n                document.querySelectorAll('.case-slider-v2').forEach((root) => {\n                    const el = root.querySelector('.swiper');\n                    if (!el || el.classList.contains('swiper-initialized')) {\n                        return;\n                    }\n\n                    const pad = (value) => String(value).padStart(2, '0');\n                    const updateCounter = (swiper) => {\n                        const currentEl = root.querySelector('.swiper-pagination-counter-current');\n                        const totalEl = root.querySelector('.swiper-pagination-counter-total');\n                        if (!currentEl || !totalEl) {\n                            return;\n                        }\n                        currentEl.textContent = pad(swiper.activeIndex + 1);\n                        totalEl.textContent = pad(swiper.slides.length);\n                    };\n\n                    const blog = !!root.closest('.case-slider-v2-wrap-blog');\n                    const isTablet = window.matchMedia('(min-width: 768px) and (max-width: 1024px)').matches;\n                    const options = {\n                        slidesPerView: 'auto',\n                        grabCursor: true,\n                        spaceBetween: 20,\n                        observer: true,\n                        observeParents: true,\n                        navigation: {\n                            prevEl: root.querySelector('.case-slider-v2-nav-prev'),\n                            nextEl: root.querySelector('.case-slider-v2-nav-next'),\n                        },\n                        breakpoints: {\n                            780: {\n                                spaceBetween: 40,\n                            }\n                        },\n                        on: {\n                            init: updateCounter,\n                            slideChange: updateCounter,\n                            update: updateCounter,\n                        }\n                    };\n                    if (!blog) {\n                        if (isTablet) {\n                            const GROUP = 2;\n                            options.slidesPerGroup = GROUP;\n                            options.pagination = {\n                                el: root.querySelector('.swiper-pagination'),\n                                clickable: true,\n                                renderBullet: function (index, className) {\n                                    return '<span class=\"' + className + '\" data-bullet-index=\"' + index + '\"><\/span>';\n                                },\n                            };\n                            options.on.init = function (swiper) {\n                                updateCounter(swiper);\n                                updateTabletBullets(swiper, GROUP);\n                            };\n                            options.on.slideChange = function (swiper) {\n                                updateCounter(swiper);\n                                updateTabletBullets(swiper, GROUP);\n                            };\n                            options.on.update = function (swiper) {\n                                updateCounter(swiper);\n                                updateTabletBullets(swiper, GROUP);\n                            };\n                            options.on.paginationRender = function (swiper) {\n                                const bullets = swiper.pagination.bullets;\n                                bullets.forEach((bullet) => {\n                                    bullet.addEventListener('click', function (e) {\n                                        e.preventDefault();\n                                        const i = parseInt(bullet.getAttribute('data-bullet-index'), 10);\n                                        const total = swiper.slides.length;\n                                        if (total <= 1) {\n                                            return;\n                                        }\n                                        const target = Math.min(i * GROUP, total - 1);\n                                        swiper.slideTo(target);\n                                    });\n                                });\n                            };\n                        } else {\n                            options.pagination = {\n                                el: root.querySelector('.swiper-pagination'),\n                                clickable: true,\n                            };\n                        }\n                    }\n                    new Swiper(el, options);\n\n                    if (root.dataset.csv2PopupBound === '1') {\n                        return;\n                    }\n                    const wrap = root.closest('.case-slider-v2-wrap');\n                    const popup = wrap ? wrap.querySelector('.case-slider-v2-popup-pdf') : null;\n                    if (!popup) {\n                        return;\n                    }\n                    root.dataset.csv2PopupBound = '1';\n                    const frame = popup.querySelector('.case-slider-v2-popup-pdf-frame');\n                    const closePopup = () => {\n                        popup.classList.remove('is-open');\n                        if (frame) {\n                            frame.replaceChildren();\n                        }\n                    };\n                    const openPopup = (trigger) => {\n                        const slide = trigger.closest('.swiper-slide');\n                        const sources = slide\n                            ? slide.querySelectorAll('.case-slider-v2-pdf-source canvas')\n                            : [];\n                        if (frame) {\n                            frame.replaceChildren();\n                            sources.forEach((source) => {\n                                const copy = document.createElement('canvas');\n                                const context = copy.getContext('2d');\n                                copy.width = source.width;\n                                copy.height = source.height;\n                                if (context) {\n                                    context.drawImage(source, 0, 0);\n                                }\n                                frame.appendChild(copy);\n                            });\n                        }\n                        popup.classList.add('is-open');\n                    };\n                    wrap.querySelectorAll('.case-slider-v2-card-a').forEach((trigger) => {\n                        trigger.addEventListener('click', (event) => {\n                            event.preventDefault();\n                            event.stopPropagation();\n                            openPopup(trigger);\n                        });\n                        trigger.addEventListener('keydown', (event) => {\n                            if (event.key !== 'Enter' && event.key !== ' ') {\n                                return;\n                            }\n                            event.preventDefault();\n                            openPopup(trigger);\n                        });\n                    });\n                    popup.addEventListener('click', (event) => {\n                        if (event.target === popup) {\n                            closePopup();\n                        }\n                    });\n                    const closeButton = popup.querySelector('.case-slider-v2-popup-pdf-close');\n                    if (closeButton) {\n                        closeButton.addEventListener('click', (event) => {\n                            event.preventDefault();\n                            event.stopPropagation();\n                            closePopup();\n                        });\n                    }\n                });\n            };\n\n            const updateTabletBullets = (swiper, groupSize) => {\n                const total = swiper.slides.length;\n                const bullets = swiper.pagination && swiper.pagination.bullets ? swiper.pagination.bullets : [];\n                if (!bullets.length || total <= 1) {\n                    return;\n                }\n                const group = groupSize || 2;\n                const activeIndex = Math.min(\n                    bullets.length - 1,\n                    Math.floor(swiper.activeIndex \/ group)\n                );\n                bullets.forEach((bullet, i) => {\n                    bullet.classList.toggle('swiper-pagination-bullet-active', i === activeIndex);\n                });\n            };\n\n            if (document.readyState === 'loading') {\n                document.addEventListener('DOMContentLoaded', initCaseSliderV2);\n            } else {\n                initCaseSliderV2();\n            }\n        })();\n    <\/script>\n\n    <style>\n        .case-slider-v2 .swiper {\n            margin-left: auto;\n            margin-right: auto;\n            position: relative;\n            overflow: visible;\n            list-style: none;\n            padding: 0;\n            z-index: 1;\n        }\n        .case-slider-v2 .swiper-wrapper {\n            position: relative;\n            width: 100%;\n            height: 100%;\n            z-index: 1;\n            display: flex;\n            transition-property: transform;\n            box-sizing: content-box;\n            align-items: stretch;\n        }\n        .case-slider-v2 .swiper-slide {\n            flex-shrink: 0;\n            width: 1080px;\n            max-width: 100%;\n            height: auto;\n            position: relative;\n        }\n        .case-slider-v2 .swiper-pagination-cont {\n            position: relative;\n            margin-top: 80px;\n            transform: 100%;\n        }\n        .case-slider-v2 .swiper-pagination-counter {\n            position: absolute;\n            left: 0;\n            top: 50%;\n            transform: translateY(-50%);\n            display: flex;\n            align-items: center;\n            gap: 6px;\n            font-family: Karla;\n            font-weight: 400;\n            font-size: 16px;\n            line-height: 150%;\n            color: #2E2E2E;\n            z-index: 2;\n        }\n        .case-slider-v2 .swiper-pagination {\n            --swiper-pagination-bullet-horizontal-gap: 5px;\n            position: relative;\n            bottom: auto;\n            left: auto;\n            width: 100%;\n            text-align: center;\n        }\n        .case-slider-v2 .swiper-pagination-bullet {\n            display: inline-block;\n            width: 100px;\n            height: 4px !important;\n            border-radius: 0;\n            background-color: #dbd8d8;\n            opacity: 1;\n        }\n        .case-slider-v2 .swiper-pagination-bullet-active {\n            background-color: #2e2e2e;\n        }\n        .case-slider-v2 .swiper-pagination.swiper-pagination-bullets.swiper-pagination-horizontal {\n            width: 100%;\n            transform: none;\n            padding-top: 0;\n            position: relative;\n            text-align: center;\n            bottom:0;\n        }\n        .case-slider-v2-card{\n            border: 1px solid #999999;\n            background: #FBFBFD;\n            padding:60px;\n            display:grid;\n            grid-template-columns:minmax(0,1fr) 458px;\n            align-items:stretch;\n            gap:40px;\n            width:100%;\n            max-width:none;\n            height:100%;\n            box-sizing:border-box;\n        }\n        .case-slider-v2-wrap-blog .case-slider-v2-card{\n            padding:40px;\n        }\n        .case-slider-v2-card-left{\n            display:flex;\n            flex-direction:column;\n            align-self:stretch;\n            height:100%;\n            min-height:100%;\n            gap:20px;\n        }\n        .case-slider-v2 *{\n            text-decoration:none!important;\n        }\n        .case-slider-v2-card-logo{\n            display:flex;\n            align-items:center;\n            gap:16px;\n            margin-bottom:30px;\n            min-height:40px;\n        }\n        .case-slider-v2-card-logo > img{\n            height:40px;\n\t\t\tmax-width:200px;\n        }\n        .case-slider-v2-card-logo > a{\n            font-family: Karla;\n            font-weight: 400;\n            font-size: 16px;\n            line-height: 100%;\n            color:#585858;\n            padding-left:16px;\n            border-left:1px solid #D8D8D8;\n        }\n\t\t.case-slider-v2-card-logo > a.only{\n\t\t\tborder-left: 3px solid #C63031;\n\t\t}\n        .case-slider-v2-card-logo > a:hover{\n            color:#C63031;\n        }\n        .case-slider-v2-card-logo > a:active{\n            color:#D13B3B;\n        }\n        .case-slider-v2-card-title{\n            font-family: Sora;\n            font-weight: 600;\n            font-size: 24px;\n            line-height: 135%;\n            color:#2E2E2E;\n            margin-bottom:20px;\n        }\n        .case-slider-v2-card-text{\n            font-family: Karla;\n            font-weight: 400;\n            font-size: 18px;\n            line-height: 135%;\n            color:#585858;\n            margin-bottom:20px;\n        }\n        .case-slider-v2-card-n-blocks{\n            display:grid;\n            grid-template-columns:repeat(2,1fr);\n            gap:30px;\n        }\n        .case-slider-v2-card-n-block{\n\n        }\n        .case-slider-v2-card-n-block b{\n            font-family: Karla;\n            font-weight: 500;\n            font-size: 42px;\n            line-height: 100%;\n            color:#2E2E2E;\n            margin-bottom:4px;\n            display:block;\n        }\n        .case-slider-v2-card-n-block span{\n            font-family: Karla;\n            font-weight: 400;\n            font-size: 16px;\n            line-height: 135%;\n            color:#2E2E2E;\n        }\n        .case-slider-v2-card-buttons{\n            display:flex;\n            justify-content:space-between;\n            align-items:center;\n            margin-top:auto;\n        }\n        .case-slider-v2-card-button,.swiper-slide .case-slider-v2-card-button{\n            background: #C63031;\n            padding:14px 28px;\n            font-family: Karla;\n            font-weight: 400;\n            font-size: 18px;\n            line-height: 150%;\n            color:#FFFFFF;\n            text-decoration:none!important;\n        }\n        .case-slider-v2-card-button:hover,.swiper-slide .case-slider-v2-card-button:hover{\n            background: #D13B3B;\n            color:#FFFFFF!important;\n        }\n        .swiper-slide:hover .case-slider-v2-card-button{\n            color:#FFFFFF!important;\n        }\n        .case-slider-v2-card-a{\n            font-family: Karla;\n            font-weight: 600;\n            font-size: 16px;\n            line-height: 150%;\n            color:#2E2E2E;\n            border-bottom:1px solid#2E2E2E;\n            cursor:pointer;\n        }\n        .case-slider-v2-card-a img{\n            display:none;\n        }\n        .case-slider-v2-card-a:hover{\n            color:#C63031;\n            border-color:#C63031;\n        }\n        .case-slider-v2-card-right{\n            width:458px;\n\t\t\tmin-width:458px;\n            overflow:hidden;\n\t\t\tborder: 1px solid #E8E8E8;\n        }\n        .case-slider-v2-card-right > img{\n            width:100%;\n\t\t\theight:100%;\n\t\t\tdisplay:block;\n            object-fit:cover;\n            transition:0.5s;\n        }\n        .case-slider-v2-card:hover .case-slider-v2-card-right > img{\n            transform:scale(1.1);\n        }\n        .swiper-pagination-counter{\n            font-family: Karla;\n            font-weight: 400;\n            font-size: 22px;\n            line-height: 100%;\n            color:#2E2E2E;\n        }\n        .case-slider-v2-nav{\n            display:none;\n            background:none;\n            border:none;\n            padding:0;\n            cursor:pointer;\n            line-height:0;\n            outline:none;\n            box-shadow:none;\n            -webkit-tap-highlight-color:transparent;\n        }\n        .case-slider-v2 .case-slider-v2-nav:hover,\n        .case-slider-v2 .case-slider-v2-nav:focus,\n        .case-slider-v2 .case-slider-v2-nav:focus-visible,\n        .case-slider-v2 .case-slider-v2-nav:active{\n            outline:none;\n            box-shadow:none;\n            border:none;\n            background:none;\n        }\n        .case-slider-v2-nav.swiper-button-disabled path{\n            stroke:#C1C1C1;\n        }\n\n        .case-slider-v2-card-right .case-slider-v2-card-buttons{\n            display:none;\n        }\n\n        @media(max-width:1024px){\n            .case-slider-v2-card,.case-slider-v2-wrap-blog .case-slider-v2-card{\n                padding:40px;\n            }\n            .case-slider-v2 .swiper-pagination-cont {\n                margin-top:40px;\n            }\n            .case-slider-v2-card-buttons{\n                display:none;\n            }\n            .case-slider-v2 .swiper-pagination-bullet{\n                width:50px;\n            }\n        }\n        @media(max-width:900px){\n            .case-slider-v2-card{\n                display:flex;\n                gap:40px;\n                flex-direction:column;\n                justify-content: space-between;\n            }\n            .case-slider-v2-card-left{\n                width:100%;\n                min-width:0;\n                min-height:0;\n                height:auto;\n            }\n            .case-slider-v2-card-right{\n                width:100%;\n                min-width:0;\n                min-height:0;\n                height:auto;\n                max-height:300px;\n            }\n            .case-slider-v2-card-left{\n                gap:30px;\n            }\n            .case-slider-v2-card-logo{\n                margin-bottom:20px;\n            }\n            .case-slider-v2-card-right .case-slider-v2-card-buttons{\n                display:flex;\n                margin-bottom:40px;\n                gap:40px;\n                justify-content:flex-start;\n            }\n        }\n        @media(max-width:767px){\n            .case-slider-v2-card,.case-slider-v2-wrap-blog .case-slider-v2-card{\n                padding: 24px 20px;\n            }\n            .case-slider-v2-card-logo{\n                margin-bottom:20px;\n                gap:12px;\n                min-height:30px;\n            }\n            .case-slider-v2-card-logo > img{\n                height:30px;\n            }\n            .case-slider-v2-card-logo > a{\n                padding-left:12px;\n                font-size:12px;\n            }\n            .case-slider-v2-card-title{\n                font-size:18px;\n                margin-bottom:16px;\n            }\n            .case-slider-v2-card-text{\n                font-size:14px;\n                margin-bottom:16px;\n            }\n            .case-slider-v2-card-n-block b{\n                margin-bottom:2px;\n                font-size:30px;\n            }\n            .case-slider-v2-card-n-block span{\n                font-size:12px;\n            }\n            .case-slider-v2-card-n-blocks{\n                gap:20px;\n            }\n            .case-slider-v2-card{\n                gap:20px;\n            }\n            .case-slider-v2-card-right{\n                display:flex;\n                flex-direction:column;\n                position:relative;\n            }\n            .case-slider-v2-card-buttons{\n                display:none;\n            }\n            .case-slider-v2-card-right .case-slider-v2-card-buttons{\n                display:block;\n                order:2;\n                margin-bottom:0;\n            }\n            .case-slider-v2-card-button{\n                display:block;\n                width:100%;\n                font-size:16px;\n                text-align:center;\n                padding: 12px 24px;\n            }\n            .case-slider-v2-card-a{\n                border:0;\n                text-align:center;\n                font-size:14px;\n                font-weight:400;\n                position:absolute;\n                top:0;\n                right:0;\n                background:#FBFBFD;\n                padding:5px 8px;\n                display:flex;\n                gap:4px;\n                align-items:center;\n            }\n            .case-slider-v2-card-a img{\n                display:block;\n                width:18px;\n                height:13px;\n            }\n            .case-slider-v2-card-right > img {\n                height: 180px;\n                object-fit: cover;\n            }\n            .case-slider-v2 .swiper-pagination-counter{\n                font-size:18px;\n            }\n            \n\n            .case-slider-v2 .swiper-pagination{\n                display:none;\n            }\n            .case-slider-v2 .swiper-pagination-cont{\n                display:flex;\n                align-items:center;\n                gap:12px;\n                width:100%;\n                transform:none;\n                margin-top:20px;\n            }\n            .case-slider-v2 .swiper-pagination-counter{\n                position:static;\n                transform:none;\n            }\n            .case-slider-v2-nav{\n                display:flex;\n                align-items:center;\n                justify-content:center;\n            }\n        }\n                .case-slider-v2-wrap-blog .case-slider-v2{\n            overflow:hidden;\n        }\n        .case-slider-v2-wrap-blog .swiper-pagination{\n            display:none;\n        }\n        .case-slider-v2-wrap-blog .swiper-pagination-cont{\n            display:flex;\n            align-items:center;\n            gap:10px;\n            width:100%;\n            transform:none;\n            margin-top:40px;\n        }\n        .case-slider-v2-wrap-blog .swiper-pagination-counter{\n            position:static;\n            transform:none;\n            font-size:22px;\n        }\n        .case-slider-v2-wrap-blog .case-slider-v2-nav{\n            display:flex;\n            align-items:center;\n            justify-content:center;\n        }\n        @media(max-width:768px){\n            .case-slider-v2-wrap-blog .swiper-pagination-cont{\n                margin-top:20px;\n            }\n            .case-slider-v2-wrap-blog .swiper-pagination-counter{\n                font-size:18px;\n            }\n        }\n                .case-slider-v2-popup-pdf{\n            display:none;\n            width:100vw;\n            height:100vh;\n            justify-content:center;\n            padding-top:150px;\n            position:fixed;\n            top:0;\n            left:0;\n            background:#0000009c;\n            z-index:10000;\n        }\n        .case-slider-v2-popup-pdf.is-open{\n            display:flex;\n        }\n        .case-slider-v2-popup-pdf-cont{\n            max-width:680px;\n            width:95%;\n            background:#fff;\n            padding:40px;\n            height:calc(100vh - 200px);\n            position:relative;\n            z-index:10;\n        }\n        .case-slider-v2-popup-pdf-frame{\n            overflow-y:auto;\n            overflow-x:hidden;\n            height:100%;\n            scrollbar-width:thin;\n            scrollbar-color:#888 transparent;\n        }\n        .case-slider-v2-popup-pdf-frame::-webkit-scrollbar{\n            width:6px;\n            background:transparent;\n        }\n        .case-slider-v2-popup-pdf-frame::-webkit-scrollbar-thumb{\n            background:#888;\n            border-radius:3px;\n        }\n        .case-slider-v2-popup-pdf-close{\n            position:absolute;\n            top:14px;\n            right:14px;\n            cursor:pointer;\n        }\n        .case-slider-v2-popup-pdf-frame canvas{\n            width:100%;\n            display:block;\n        }\n\n    <\/style>\n    \n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e3f6227 e-con-full e-flex e-con e-child\" data-id=\"e3f6227\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8dc99d8 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"8dc99d8\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conclusion<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e7f9ffe elementor-widget elementor-widget-text-editor\" data-id=\"e7f9ffe\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>PHP2Shell exposed a serious risk in the PHP interpreter itself. Framework updates and dependency checks won&#8217;t fix vulnerabilities at that level. Companies need to identify every PHP runtime handling web requests, install the security updates, and verify that production servers are running the patched versions.<\/p>\n<p>PHP security also requires regular checks of application code, configuration, and access controls, particularly after critical vulnerability disclosures or major updates. If you need help assessing your exposure or verifying the fixes, Innowise&#8217;s <a href=\"https:\/\/innowise.com\/services\/cybersecurity\/it-security-consulting\/\">IT security consulting<\/a> and <a href=\"https:\/\/innowise.com\/services\/cybersecurity\/assessment\/\">cybersecurity assessment<\/a> teams can support that work.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-dfc0b54 e-con-full e-flex e-con e-child\" data-id=\"dfc0b54\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-131a745 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"131a745\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">FAQ<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c20d0bb e-con-full e-flex e-con e-child\" data-id=\"c20d0bb\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1a85bc3 faq elementor-widget elementor-widget-n-accordion\" data-id=\"1a85bc3\" data-element_type=\"widget\" data-settings=\"{&quot;default_state&quot;:&quot;all_collapsed&quot;,&quot;max_items_expended&quot;:&quot;one&quot;,&quot;n_accordion_animation_duration&quot;:{&quot;unit&quot;:&quot;ms&quot;,&quot;size&quot;:400,&quot;sizes&quot;:[]}}\" data-widget_type=\"nested-accordion.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-n-accordion\" aria-label=\"Accordion. Open links with Enter or Space, close with Escape, and navigate with Arrow Keys\">\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2780\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"1\" tabindex=\"0\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2780\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Are my PHP applications affected by PHP2Shell (CVE-2026-109618 and CVE-2026-109619)? <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M19 8h2v24h-2z\"><\/path><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-2780\" class=\"elementor-element elementor-element-b844938 e-con-full e-flex e-con e-child\" data-id=\"b844938\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-af4c96f translation-block elementor-widget elementor-widget-html\" data-id=\"af4c96f\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class='content'>\n    <p>Your application may be at risk if your server runs a PHP version that hasn't been patched for CVE-2026-109618 and CVE-2026-109619. Check which PHP version is actually running and whether your hosting provider has applied the fixes. Apache mod_php has the highest confirmed risk, but PHP-FPM also needs checking. Since the vulnerabilities are in PHP itself, updating WordPress or another framework won't fix them.\n\n<\/p>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2781\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"2\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2781\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Which PHP versions fix the October 2026 vulnerabilities, and how can I verify the patch? <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M19 8h2v24h-2z\"><\/path><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-2781\" class=\"elementor-element elementor-element-3286f9f e-con-full e-flex e-con e-child\" data-id=\"3286f9f\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2143689 translation-block elementor-widget elementor-widget-html\" data-id=\"2143689\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class='content'>\n    <p>PHP2Shell fixes are available in PHP 8.2.35, 8.3.36, 8.4.27, and 8.5.12. Some Linux vendors have backported the patches to older builds, so check your vendor's advisory. Make sure your running PHP workers use the patched build. On Windows, install the updated October 26 packages ending in -1, which also fix a separate Brotli vulnerability.\n<\/p>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2782\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"3\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2782\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> What should I do if I cannot patch PHP immediately? <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M19 8h2v24h-2z\"><\/path><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-2782\" class=\"elementor-element elementor-element-edb5351 e-con-full e-flex e-con e-child\" data-id=\"edb5351\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7bc12db translation-block elementor-widget elementor-widget-html\" data-id=\"7bc12db\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class='content'>\n    <p>If you can't update PHP right away, restrict public access to affected applications where possible. For sites that must stay online, your server administrator can apply temporary measures from the PHP security advisory, such as limiting request sizes or disabling session upload progress. Test these changes to make sure the site still works. They only reduce the risk, so installing a patched PHP version remains urgent.<\/p>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2783\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"4\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2783\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Is updating PHP enough to secure an application? <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M19 8h2v24h-2z\"><\/path><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-2783\" class=\"elementor-element elementor-element-1ed2647 e-flex e-con-boxed e-con e-child\" data-id=\"1ed2647\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-811bc57 translation-block elementor-widget elementor-widget-html\" data-id=\"811bc57\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class='content'>\n    <p>No. Updating PHP fixes vulnerabilities in the PHP runtime, but it won't fix security issues in your application code, outdated plugins, or server configuration. You need to check and address those separately.<\/p>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2784\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"5\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2784\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> How often should I perform a PHP security audit? <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M19 8h2v24h-2z\"><\/path><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-2784\" class=\"elementor-element elementor-element-234527f e-flex e-con-boxed e-con e-child\" data-id=\"234527f\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5b7f924 translation-block elementor-widget elementor-widget-html\" data-id=\"5b7f924\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class='content'>\n    <p>I'd recommend checking PHP applications for known vulnerabilities at least monthly, with more frequent checks for high-risk systems. Monitor PHP security advisories and dependencies continuously, and schedule more thorough audits based on your application's exposure and business risk. Additional testing is important after major updates or critical vulnerability disclosures.<\/p>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2785\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"6\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2785\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> What tools can I use to check PHP security vulnerabilities? <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M19 8h2v24h-2z\"><\/path><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-2785\" class=\"elementor-element elementor-element-3e207f1 e-flex e-con-boxed e-con e-child\" data-id=\"3e207f1\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c06bce8 translation-block elementor-widget elementor-widget-html\" data-id=\"c06bce8\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class='content'>\n    <p>Check PHP security advisories and your hosting or OS vendor's bulletins for known vulnerabilities. Use composer audit --locked to check dependencies, static analysis and code review to find application-level issues, and OWASP ZAP to test your web application with permission. To verify security patches, check the PHP version running in production and any fixes backported by your vendor.<\/p>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2786\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"7\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2786\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Can PHP security updates break an existing application? <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M19 8h2v24h-2z\"><\/path><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-2786\" class=\"elementor-element elementor-element-00a80bd e-flex e-con-boxed e-con e-child\" data-id=\"00a80bd\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-06c663b translation-block elementor-widget elementor-widget-html\" data-id=\"06c663b\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class='content'>\n    <p>Yes. Updates can cause compatibility issues with older code or extensions. Test them in staging before updating your live application, and have a recovery plan ready in case something breaks.<\/p>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2787\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"8\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2787\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> How can I tell if a PHP vulnerability was exploited before patching? <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"40\" height=\"40\" fill=\"none\"><path fill=\"#C63031\" d=\"M19 8h2v24h-2z\"><\/path><path fill=\"#C63031\" d=\"M8 21v-2h24v2z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-2787\" class=\"elementor-element elementor-element-8c7be88 e-flex e-con-boxed e-con e-child\" data-id=\"8c7be88\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b8fa2dc translation-block elementor-widget elementor-widget-html\" data-id=\"b8fa2dc\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class='content'>\n    <p>Correlate reverse-proxy, Apache\/nginx, PHP-FPM, and EDR\/host logs. Look for worker crashes, suspicious files or processes, unexpected outbound traffic, and signs of credential exposure. Application logs may miss PHP runtime exploits that occur before the framework starts logging. If you find suspicious activity, initiate incident response and preserve forensic evidence.<\/p>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<script type=\"application\/ld+json\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"Are my PHP applications affected by PHP2Shell (CVE-2026-109618 and CVE-2026-109619)?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Your application may be at risk if your server runs a PHP version that hasn't been patched for CVE-2026-109618 and CVE-2026-109619. Check which PHP version is actually running and whether your hosting provider has applied the fixes. Apache mod_php has the highest confirmed risk, but PHP-FPM also needs checking. Since the vulnerabilities are in PHP itself, updating WordPress or another framework won't fix them.\"}},{\"@type\":\"Question\",\"name\":\"Which PHP versions fix the October 2026 vulnerabilities, and how can I verify the patch?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"PHP2Shell fixes are available in PHP 8.2.35, 8.3.36, 8.4.27, and 8.5.12. Some Linux vendors have backported the patches to older builds, so check your vendor's advisory. Make sure your running PHP workers use the patched build. On Windows, install the updated October 26 packages ending in -1, which also fix a separate Brotli vulnerability.\"}},{\"@type\":\"Question\",\"name\":\"What should I do if I cannot patch PHP immediately?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"If you can't update PHP right away, restrict public access to affected applications where possible. For sites that must stay online, your server administrator can apply temporary measures from the PHP security advisory, such as limiting request sizes or disabling session upload progress. Test these changes to make sure the site still works. They only reduce the risk, so installing a patched PHP version remains urgent.\"}},{\"@type\":\"Question\",\"name\":\"Is updating PHP enough to secure an application?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. Updating PHP fixes vulnerabilities in the PHP runtime, but it won't fix security issues in your application code, outdated plugins, or server configuration. You need to check and address those separately.\"}},{\"@type\":\"Question\",\"name\":\"How often should I perform a PHP security audit?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"I'd recommend checking PHP applications for known vulnerabilities at least monthly, with more frequent checks for high-risk systems. Monitor PHP security advisories and dependencies continuously, and schedule more thorough audits based on your application's exposure and business risk. Additional testing is important after major updates or critical vulnerability disclosures.\"}},{\"@type\":\"Question\",\"name\":\"What tools can I use to check PHP security vulnerabilities?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Check PHP security advisories and your hosting or OS vendor's bulletins for known vulnerabilities. Use composer audit --locked to check dependencies, static analysis and code review to find application-level issues, and OWASP ZAP to test your web application with permission. To verify security patches, check the PHP version running in production and any fixes backported by your vendor.\"}},{\"@type\":\"Question\",\"name\":\"Can PHP security updates break an existing application?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. Updates can cause compatibility issues with older code or extensions. Test them in staging before updating your live application, and have a recovery plan ready in case something breaks.\"}},{\"@type\":\"Question\",\"name\":\"How can I tell if a PHP vulnerability was exploited before patching?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Correlate reverse-proxy, Apache\\\/nginx, PHP-FPM, and EDR\\\/host logs. Look for worker crashes, suspicious files or processes, unexpected outbound traffic, and signs of credential exposure. Application logs may miss PHP runtime exploits that occur before the framework starts logging. If you find suspicious activity, initiate incident response and preserve forensic evidence.\"}}]}<\/script>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-64c8260 elementor-widget elementor-widget-html\" data-id=\"64c8260\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n    .show-more-faq{\n    display: block;\n    color: #c63031;\n    border: none;\n    cursor: pointer;\n    font-size: 18px;\n    line-height: 24px;\n    font-weight: 600;\n    width: fit-content;\n}\n.faq .e-n-accordion-item {\n    border-top: 1px solid #000;\n}\n\n.show-more-faq>span:nth-child(1){\n    display: none;\n}\n.show-more-faq>span:nth-child(2){\n    display: block;\n}\n\n.show-more-faq.close >span:nth-child(1){\n    display: block;\n}\n.show-more-faq.close >span:nth-child(2){\n    display: none;\n}\n\n.faq .e-n-accordion-item.close{\n    display: none;\n}\n\n\n\n@media (max-width: 767px) {\n  .show-more-faq{\n    font-size: 14px;\n    line-height: 21px;\n}  \n}\n\n<\/style>   \n\n\n<div class=\"show-more-faq close\">\n       <span>Show more<\/span>\n       <span>Show less<\/span>\n<\/div>  \n  \n <script>\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n\nconst showMoreFaq = document.querySelector(\".show-more-faq\");\nif (!showMoreFaq) return;\n\nconst faqWidget = showMoreFaq.closest(\".elementor-widget\").previousElementSibling;\nconst faqItems = faqWidget ? faqWidget.querySelectorAll(\".e-n-accordion-item\") : [];\n\nfaqItems.forEach((item, index) => {\n  if (index >= 4) {\n    item.classList.add(\"close\");\n  }\n});\n\nshowMoreFaq.addEventListener(\"click\", () => {\n\n  const isClosed = showMoreFaq.classList.contains(\"close\");\n\n  faqItems.forEach((item, index) => {\n    if (index >= 4) {\n      item.classList.toggle(\"close\", !isClosed);\n    }\n  });\n\n  showMoreFaq.classList.toggle(\"close\");\n});\n\n});\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d22d368 elementor-widget elementor-widget-shortcode\" data-id=\"d22d368\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">[post_share]<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-7e18413 table-content-container\" data-id=\"7e18413\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5285f31 e-con-full stickyTable e-flex e-con e-child\" data-id=\"5285f31\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-73d507f author-block e-con-full e-flex e-con e-child\" data-id=\"73d507f\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7407ed2 ddcv elementor-widget elementor-widget-html\" data-id=\"7407ed2\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n    .article-description > .e-con-inner {\n        align-items: baseline !important;\n        \/* align-items: flex-start !important; *\/\n    }\n\n    .stickyTable {\n        position: sticky;\n        top: 72px;\n        bottom: auto;\n    }\n<\/style>\n\n<!--NOTE Change data-id in wrapper styles for hide this block on the mobile device screen-->\n<div class=\"toc-wrapper\">\n    <h4 class=\"toc-title\">Table of contents<\/h4>\n    <div class=\"toc toc-2\"><\/div>\n<\/div>\n\n<script>\n    document.addEventListener(\"DOMContentLoaded\", () => {\n        \/*-------------------------------\n        SETTING\n      --------------------------------*\/\n        const LINKS = {\n            \"Key takeaways\": \"Key takeaways\",\n            \"Expert breakdown: how PHP2Shell differs from a routine dependency CVE\": \"PHP2Shell vs. dependency CVE\",\n            \"Where do PHP security vulnerabilities come from?\": \"Vulnerability sources\",\n            \"PHP security checklist: 8 essential checks\": \"Security checklist\",\n            \"How to prioritize, deploy, and verify PHP security fixes\": \"Patching & verification\",\n            \"Worked example: a production patch that looks successful but is not\": \"Production patch example\",\n            \"How Innowise can help secure your PHP applications\": \"How Innowise helps\",\n            \"See related services we offer\": \"Related services\",\n            \"Our PHP projects\": \"Our PHP projects\",\n            \"Conclusion\": \"Conclusion\",\n            \"FAQ\": \"FAQ\",\n        };\n\n        const OFFSET = 70;\n\n        let headerElements = [];\n        let tocLinks = [];\n\n        \/\/SET TOC HEIGHT\n        const setContainerHeight = () => {\n            const windowHeight = window.innerHeight;\n            const tocContainer = document.querySelector(\".ddcv\");\n\n            tocContainer.style.maxHeight = \"calc(100vh - 230px)\";\n            tocContainer.style.minHeight = \"200px\";\n        };\n\n        \/*-------------------------------\n        CREATE TOC LIST\n      --------------------------------*\/\n        function createToc() {\n            const tocContainer = document.querySelector(\".toc.toc-2\");\n            const list = document.createElement(\"ul\");\n\n\n            headerElements = [\n                ...document.querySelectorAll(\".article-description h2\"),\n            ];\n\n\n            const excluded = [\n                document.querySelector(\".related_content_blog_container h2\"),\n            ];\n            \/\/   headerElements = headerElements.filter((h) => !excluded.includes(h));\n\n            headerElements.forEach((header) => {\n                const textOriginal =\n                    header.dataset.title?.trim() || header.textContent.trim();\n                const id =\n                    header.id ||\n                    textOriginal\n                        .toLowerCase()\n                        .replace(\/[^\\w ]+\/g, \"\")\n                        .replace(\/ +\/g, \"-\");\n                header.id = id;\n\n                const li = document.createElement(\"li\");\n                const a = document.createElement(\"a\");\n\n                a.href = \"#\" + id;\n                a.textContent = LINKS[textOriginal] || textOriginal;\n\n                a.addEventListener(\"click\", (e) => {\n                    e.preventDefault();\n                    const y =\n                        header.getBoundingClientRect().top + window.scrollY - OFFSET;\n                    window.scrollTo({ top: y, behavior: \"smooth\" });\n                });\n\n                li.appendChild(a);\n                list.appendChild(li);\n            });\n\n            tocContainer.appendChild(list);\n            tocLinks = Array.from(list.querySelectorAll(\"li\"));\n        }\n\n\n        function createObserver() {\n            const observerOptions = {\n                root: null,\n                rootMargin: \"0px 0px -60% 0px\",\n                threshold: 0,\n            };\n\n            const callback = (entries) => {\n                entries.forEach((entry) => {\n                    if (entry.isIntersecting) {\n                        const id = entry.target.id;\n\n                        tocLinks.forEach((li) =>\n                            li.classList.remove(\"active\", \"pre-active\"),\n                        );\n\n                        const index = headerElements.findIndex((h) => h.id === id);\n\n                        tocLinks.forEach((li, i) => {\n                            if (i === index) li.classList.add(\"active\");\n                            if (i < index) li.classList.add(\"pre-active\");\n                        });\n                    }\n                });\n            };\n\n            const observer = new IntersectionObserver(callback, observerOptions);\n            headerElements.forEach((h) => observer.observe(h));\n        }\n\n\n        function loadAllImages() {\n            document.querySelectorAll(\"img\").forEach((img) => {\n                const src = img.dataset.src || img.src;\n                img.src = src;\n            });\n        }\n\n        \/*-------------------------------\n        INIT\n      --------------------------------*\/\n        setTimeout(() => {\n            loadAllImages();\n            createToc();\n            setContainerHeight();\n            createObserver();\n        }, 300);\n    });\n<\/script>\n\n<style>\n    .table-content-container {\n        max-width: 300px;\n        width: 100%;\n        flex-shrink: 0;\n    }\n\n    .table-content-container .elementor-widget-wrap {\n        margin: 0 !important;\n        padding: 0 !important;\n    }\n\n    @media (max-width: 1279px) {\n        .table-content-container {\n            display: none !important;\n        }\n    }\n\n    .toc-wrapper {\n        display: flex;\n        flex-direction: column;\n        row-gap: 30px;\n        font-family: \"Karla\";\n        box-sizing: border-box;\n        max-height: 436px;\n\n        flex: 1;\n    }\n    .ddcv {\n        flex-basis: 100%;\n        flex-grow: 1;\n        flex-shrink: 1;\n        overflow-y: auto;\n    }\n\n    .toc-wrapper {\n        overflow-y: auto;\n        \/*flex-shrink: 1;*\/\n        \/*flex-basis: 436px;*\/\n        \/*flex-grow: 1;*\/\n    }\n\n    .toc-wrapper::-webkit-scrollbar,\n    .ddcv::-webkit-scrollbar {\n        position: absolute !important;\n        width: 4px !important;\n        background-color: #f5f5f7 !important;\n    }\n\n    .toc-wrapper::-webkit-scrollbar-thumb,\n    .ddcv::-webkit-scrollbar-thumb {\n        position: absolute !important;\n        background-color: #999999 !important;\n        border-radius: 4px !important;\n    }\n\n    .toc-wrapper .toc {\n        scrollbar-width: 4px !important;\n        scrollbar-color: auto !important;\n    }\n\n    h4.toc-title {\n        margin: 0;\n        font-family: Karla;\n        font-size: 22px;\n        line-height: 28px;\n        font-weight: 700;\n    }\n\n    @media screen and (max-width: 1279px) {\n        .ddcv {\n            margin-top: 0px;\n            position: absolute;\n            top: 0px;\n            left: 50%;\n            transform: translate(50%, 0);\n        }\n    }\n\n    @media screen and (max-width: 767px) {\n        .ddcv {\n            display: none;\n        }\n    }\n\n    .toc ul {\n        list-style: none;\n        font-family: \"Karla\";\n        font-size: 16px;\n        line-height: 22px;\n        padding: 0px;\n        border-left: 1px solid #717171;\n    }\n\n    .toc li {\n        margin-left: -1px;\n        margin-top: 0;\n        padding: 16px 16px 16px 20px;\n        font-size: 18px;\n        line-height: 22px;\n        color: #717171;\n        border-left: 2px solid transparent;\n    }\n\n    .toc ul li a {\n        display: block;\n        width: 100%;\n        color: inherit;\n        text-decoration: none !important;\n    }\n\n    .toc ul .active {\n        color: #2e2e2e;\n        border-left: 2px solid #c63031;\n    }\n\n    .toc ul .pre-active {\n        border-left: 2px solid #c63031;\n    }\n<\/style>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0115388 e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"0115388\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-f5f572d e-con-full e-flex e-con e-child\" data-id=\"f5f572d\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b8970a0 elementor-widget-tablet__width-inherit elementor-widget__width-initial max100 elementor-widget elementor-widget-heading\" data-id=\"b8970a0\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Find out which PHP workloads need a security update first<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-57a97d9 e-con-full e-flex e-con e-child\" data-id=\"57a97d9\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-96d42ac elementor-absolute elementor-widget-mobile__width-inherit transform elementor-widget elementor-widget-html\" data-id=\"96d42ac\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"wave-container\"><\/div>\r\n\r\n<style>\r\n  .wave-container {\r\n    width: 400px;\r\n    height: 400px;\r\n  }\r\n\r\n  @media(max-width: 767px) {\r\n    .wave-container {\r\n      width: 100%;\r\n      height: 100%;\r\n    }\r\n  }\r\n\r\n\r\n  .wave {\r\n    position: absolute;\r\n    border: 1px solid rgba(210, 184, 214, 1);\r\n    border-radius: 50%;\r\n    animation: drop 16s infinite;\r\n    top: 50%;\r\n    left: 50%;\r\n    transform: translate(-50%, -50%);\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  @keyframes drop {\r\n    0% {\r\n      width: 0px;\r\n      height: 0px;\r\n      border: 1px solid rgba(210, 184, 214, 1);\r\n    }\r\n\r\n    100% {\r\n      width: 400px;\r\n      height: 400px;\r\n      border: 1px solid rgba(210, 184, 214, 0);\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n\r\n  document.addEventListener('DOMContentLoaded', () => {\r\n    function createWaves(numberOfWaves) {\r\n      const waveContainers = document.querySelectorAll('.wave-container');\r\n\r\n      waveContainers.forEach((waveContainer) => {\r\n        for (let i = 0; i < numberOfWaves; i++) {\r\n          const wave = document.createElement('div');\r\n          wave.classList.add('wave');\r\n\r\n          wave.style.animationDelay = `${i * 0.8}s`;\r\n\r\n          waveContainer.appendChild(wave);\r\n        }\r\n      });\r\n    }\r\n\r\n    createWaves(10)\r\n  });\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e4e33d elementor-align-left elementor-widget__width-initial elementor-widget-mobile__width-inherit cta-btn elementor-widget elementor-widget-button\" data-id=\"7e4e33d\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#contact-form\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Assess my PHP exposure<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-48b3e6a e-flex e-con-boxed e-con e-parent\" data-id=\"48b3e6a\" data-element_type=\"container\" id=\"contact-us\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3950cfc elementor-widget elementor-widget-shortcode\" data-id=\"3950cfc\" data-element_type=\"widget\" id=\"contact-us\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f100240-o1\" lang=\"en-US\" dir=\"ltr\" data-wpcf7-id=\"100240\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/de\/wp-json\/wp\/v2\/posts\/202648#wpcf7-f100240-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Contact form\" enctype=\"multipart\/form-data\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"100240\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.6\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_US\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f100240-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<style>\n.mailToContact br:nth-child(2){\ndisplay:none;\n}\n#form-templates .contact__info {\n  background-color: #f4f4f4;\n  padding: 70px 44px 70px 50px;\n  position: relative;\n  max-width: 540px;\n  width: 100%;\nborder: 1px solid #AEB1B7;\n}\n\n#form-templates .contact__info-background {\n  z-index: -1;\n  position: absolute;\n  top: 20px;\n  left: 20px;\n  width: 100%;\n  height: 100%;\n  border: 1px dashed #ef4557;\n}\n\n\n#form-templates .new-container{\ndisplay: flex;\njustify-content: space-between;\nflex-wrap: wrap;\n}\n\n\n#form-templates{\npadding: 100px 15px 100px 15px;        \n}\n\n#form-templates .contact__info-heading {\n  font-family: 'Sora' !important;\n  font-style: normal !important;\n  font-weight: 400 !important;\n  font-size: 36px !important;\n  line-height: 46px !important;\n  color: #2E2E2E !important;\n   margin-bottom: 60px !important;\n\n}\n\n\n#form-templates .message label{\ncolor: #585858 !important;   \n}\n\n.elementor-widget-container.form-template h2,.elementor-widget-container.form-template h1{\n font-size: 60px !important;\n  line-height: 70px !important;\n  font-family: \"Sora\", Sans-serif;\n  font-weight: 400;\n  margin: 0;  \n  margin-bottom: 20px;\n}\n\n\n\n\n.elementor-widget-container.form-template p{\n  font-family: \"Karla\", Sans-serif;\n  font-size: 22px;\n  font-weight: 400;\n  line-height: 28px;\n  color: var( --e-global-color-primary );\n  max-width: 700px;\n  margin: 0; \n  margin-bottom: 40px;\n} \n  \n\n\n.new-container #spinner{\nwidth: 50%;\nmax-width: 700px;\n}\n\n\n#form-templates .new-container #spinner div.contact-us__wrapper:nth-child(6){\ngap:30px; \n    \n}\n\n.contact-us__wrapper .pp a{\n  text-decoration: underline;\n}\n.contact-us__wrapper .pp a:hover{\n  color:#C63031;\n}\n.contact-us__wrapper .pp a:active{\n  color: #D13B3B;\n}\n\n#form-templates .contact__info-heading {\n  margin-bottom: 67px;\n  font-size: 36px;\n  font-family: karla;\n  color:  #2E2E2E;\n\n  line-height: 49px;\n}\n\n#form-templates .contact__info-steps {\n  display: flex;\n  flex-direction: column;\n  max-width: 425x;\n  row-gap: 20px;\n  border-left: 1px solid #2e2e2e;\n}\n\n#form-templates .contact__info-block {\n  position: relative;\n  padding-left: 45px;\n}\n\n#form-templates .contact__info-block:last-child {\n  box-shadow: -1px 0 0 1px #f4f4f4;\n}\n\n#form-templates .contact__info-step {\n  position: absolute;\n  border: 1px solid #2e2e2e;\n  width: 40px;\n  height: 40px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 20px;\n  left: -20px;\n  top: -8px;\n  background-color: #F4F4F4;\n  color:  #2E2E2E;\n\nfont-family: Karla;\nfont-weight: 700;\nfont-size: 18px;\nline-height: 28px;\n\n}\n\n.elementor-widget-global .contact__info-step {\n        color:  #2E2E2E;\n}\n\n#form-templates .contact__info-text {\n  margin: 0;\n  font-size: 16px;\n  line-height: 26px;\n  color: #2E2E2E;\n  font-family: karla;\n\n  width: 100%;\n}\n\n\n#form-templates .contact-us__send{\nflex-shrink: 0;\nmargin-top:0;\n}\n\n\n\n@media screen and (max-width: 1279px) {\n    .new-container #spinner{\n        width: 100%;\n        max-width:100%;\n        margin-bottom:40px;\n    }\n    \n\n    .new-container .contact__info {\n        max-width: 700px !important;\n    }\n    \n}\n\n\n@media screen and (max-width: 1279px) {\n#form-templates{\npadding: 60px 15px 70px 15px;     \n}\n}\n\n\n\n@media screen and (max-width: 767px) {\n\n#form-templates .new-container #spinner div.contact-us__wrapper:nth-child(6){\ngap:20px; \n \n}\n\n\n  #form-templates .contact__info {\n    padding: 20px 20px 40px 40px;\n    margin: 0 auto;\n  }\n\n\n#form-templates{\npadding: 40px 15px 50px 15px;  \n    \n}\n\n  \n   .new-container #spinner{\n       \n    margin-bottom:30px;   \n   }\n   \n   \n   .elementor-widget-container #form-templates .form-template h2,.elementor-widget-container.form-template h1{\n   font-size: 32px !important;\n    line-height: 42px !important;    \n   }\n   \n   \n   .elementor-widget-container #form-templates .form-template p{\n       \n    font-size: 16px;\n    line-height: 20px;  \n    margin-bottom: 30px !important;\n \n       \n   }\n   \n   #form-templates .contact__info-heading{\n   font-size: 24px !important;\n    line-height: 49px !important;    \n       \n   }\n   \n\n.mailToContact{\nmargin-top: 10px !important;        \n}\n\n   \n\n  #form-templates .contact__info-heading {\n    font-size: 24px;\n    margin-bottom: 37px;\n  }\n\n  #form-templates .contact__info-background {\n    top: 10px;\n    left: 10px;\n  }\n\n  #form-templates .contact__info-text {\n    font-size: 12px;\n    line-height: 20px;\n  }\n  \n  \n  #form-templates .contact__info-heading {\n   margin-bottom: 35px !important;\n\n}\n\n}\n\n@media (max-width: 767px) {\n    .mailToContact {\n        max-width: 100%;\n    }\n    .contact-us__wrapper .pp {\nfont-size: 12px !important;\nline-height: 140%;\nmargin-bottom: 0 !important;\n\n}\n}\n<\/style>\n\n<script>\nwindow.addEventListener('hashchange',function(e){if(window.history.pushState){window.history.pushState('','\/',window.location.pathname)}else{window.location.hash=''}})\n<\/script>\n\n\n<div id=\"form-templates\">\n<div class=\"elementor-widget-container form-template\">\n<a name=\"contact-form\"><\/a>\n<h2>Contact us<\/h2>\n<p><a id=\"calendlylink\" style=\"\">Book a call<\/a> or fill out the form below and we\u2019ll get back to you once we\u2019ve processed your request.<\/p>\n<\/div>\n\n<div class=\"new-container\">\n\n\n<div class=\"contact-us__main\" id=\"spinner\" data-no-defer=\"1\">\n\n<div class=\"contact-us__wrapper\">\n\n<div class=\"name\">\n<label>Name<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"field_name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required contact-us__name\" id=\"contact-name\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Name*\" value=\"\" type=\"text\" name=\"field_name\" \/><\/span>\n<\/div>\n\n<div class=\"company\">\n<label>Company<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"company\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required contact-us__company\" id=\"contact-company\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Company*\" value=\"\" type=\"text\" name=\"company\" \/><\/span>\n<\/div>\n\n<\/div>\n\n<div class=\"contact-us__wrapper\">\n\n<div class=\"email\">\n<label>Email<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email contact-us__email\" id=\"contact-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Corporate email*\" value=\"\" type=\"email\" name=\"email\" \/><\/span>\n<\/div>\n\n<div class=\"phone\">\n<label>Phone<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"tel\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel contact-us__phone\" id=\"contact-phone\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Phone*\" value=\"\" type=\"tel\" name=\"tel\" \/><\/span>\n<\/div>\n\n<\/div>\n<div class=\"contact-us__wrapper subj\">\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-recipient\"><select class=\"wpcf7-form-control wpcf7-select\" id=\"form-field-subj_js\" aria-invalid=\"false\" name=\"your-recipient\"><option value=\"\">Subject*<\/option><option value=\"IT staff augmentation\">IT staff augmentation<\/option><option value=\"Turnkey product development\">Turnkey product development<\/option><option value=\"Support and enhancement\">Support and enhancement<\/option><option value=\"Careers\">Careers<\/option><option value=\"Other\">Other<\/option><\/select><\/span>\n\n<span class=\"wpcf7-form-control-wrap\" data-name=\"form-field-budget_js\"><select  class=\"wpcf7-form-control wpcf7-select\" id=\"form-field-budget_js\" aria-invalid=\"false\" name=\"form-field-budget_js\" aria-label=\"Project budget\"><option value=\"\">Project budget<\/option><option value=\"Under $15K\">Under $15K<\/option><option value=\"$15K-$30K\">$15K-$30K<\/option><option value=\"$30K-$100K\">$30K-$100K<\/option><option value=\"$100K-$250K\">$100K-$250K<\/option><option value=\"$250K-$500K\">$250K-$500K<\/option><option value=\"More than $500K\">More than $500K<\/option><\/select><\/span>\n\n<\/div>\n\n\n<div class=\"message\">\n<label>Message<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"message\"><textarea cols=\"40\" rows=\"1\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required contact-us__message\" id=\"contact-message\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Describe your needs in detail*\" name=\"message\"><\/textarea><\/span>\n<\/div>\n\n<div class=\"atvoice-wrap\">\n\n<div class=\"voice-wrap\">\n<span id=\"voice-mut\" class=\"voicetext\">Send us a voice message<\/span>\n         <div class=\"qc_voice_audio_wrapper\">\n            <div class=\"qc_voice_audio_container\">\n                <div class=\"qc_voice_audio_upload_main\" id=\"qc_audio_main\">\n                    <a class=\"qc_audio_record_button\" id=\"qc_audio_record\" href=\"#\" aria-label=\"Record an audio message\">\n                        <span class=\"dashicons dashicons-microphone\"><\/span> \u00a0<\/a> \n                <\/div>\n\n                <div class=\"qc_voice_audio_recorder\" id=\"qc_audio_recorder\" style=\"display:none\">\n\n                <\/div>\n                <div class=\"qc_voice_audio_display\" id=\"qc_audio_display\"  style=\"display:none\">\n                    <audio id=\"qc-audio\" controls src=\"\"><\/audio>\n                    <span title=\"Remove and back to main upload screen.\" class=\"qc_audio_remove_button dashicons dashicons-trash\"><\/span>\n                <\/div>\n            <\/div>\n            <input type=\"hidden\" value=\"\" name=\"qcwpvoicemessage\" id=\"qc_audio_url\" \/>\n        <\/div>\n        \n<\/div>\n\n\n<div class=\"attach-wrap\">\n<span class=\"voicetext\">Attach documents<\/span>\n\n<div class='attachment'>\n\n<div class=\"downloaded\">\n<span><\/span>\n<div class=\"deleteFile\"><\/div>\n<\/div>\n\n<div class=\"attachmentButton\" onclick=\"(function cl(e){if(e.target.nodeName == 'DIV'){e.target.parentNode.children[1].children[0].click(); }})(arguments[0]);\">\n\n<div class=\"innerText\">Upload file<\/div>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"att-files\"><input size=\"40\" class=\"wpcf7-form-control wpcf7-file\" accept=\".jpg,.png,.jpeg,.pdf\" aria-invalid=\"false\" type=\"file\" name=\"att-files\" \/><\/span>\n\n<div class=\"tip\" onclick=\"event.stopPropagation()\">\n<p>You can attach 1 file up to 2MB. Valid file formats: pdf, jpg, jpeg, png.<\/p>\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n\n\n<\/div>\n\n<div class=\"contact-us__wrapper\"> \n<p class=\"pp\">By clicking Send, you consent to Innowise processing your personal data per our <a href=\"\/privacy-notice\/\">Privacy Policy<\/a> to provide you with relevant information. By submitting your phone number, you agree that we may contact you via voice calls, SMS, and messaging apps. Calling, message, and data rates may apply.<\/p>\n\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"scoring_point\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmCampaign\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmContent\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmMedium\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmSource\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmTerm\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"location\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"city\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"ip\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"Summ\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"gclid\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"rating\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"urlCompany\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"urlWithParams\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"audioMessageLink\" \/>\n<input class=\"wpcf7-form-control wpcf7-submit has-spinner contact-us__send\" id=\"contact-send-button\" type=\"submit\" value=\"Send\" \/>\n<\/div>\n\n<div class='mailToContact'>You can also send us your request <\/br>to <a href=\"mailto:contact@innowise.com\">contact@innowise.com<\/a><\/div>\n\n<\/div>\n\n<div class=\"elementor-widget-container\" style=\"z-index:1;\">\n<div class=\"contact__info\">\n  <div class=\"contact__info-background\"><\/div>\n  <div class=\"contact__info-heading\">What happens next?<\/div>\n  <div class=\"contact__info-steps\">\n\n    <div class=\"contact__info-block\">\n      <div class=\"contact__info-step\">1<\/div>\n      <p class=\"contact__info-text\">Once we\u2019ve received and processed your request, we\u2019ll get back to you to detail your\n        project needs and sign an NDA to ensure confidentiality.<\/p>\n    <\/div>\n\n    <div class=\"contact__info-block\">\n      <div class=\"contact__info-step\">2<\/div>\n      <p class=\"contact__info-text\">After examining your wants, needs, and expectations, our team will devise a project\n        proposal with the scope of work, team size, time, and cost estimates.<\/p>\n    <\/div>\n\n    <div class=\"contact__info-block\">\n      <div class=\"contact__info-step\">3<\/div>\n      <p class=\"contact__info-text\">We\u2019ll arrange a meeting with you to discuss the offer and nail down the details.<\/p>\n    <\/div>\n\n    <div class=\"contact__info-block\">\n      <div class=\"contact__info-step\">4<\/div>\n      <p class=\"contact__info-text\">Finally, we\u2019ll sign a contract and start working on your project right away.<\/p>\n    <\/div>\n  <\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\n<\/div>\n\n<\/div><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-326cff6 custom-roadmap elementor-widget elementor-widget-html\" data-id=\"326cff6\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script>\n(() => {\n  const SPACING = {\n    desktop: { h3: [60, 40], h4: [18, 20] },\n    tablet: { h3: [40, 30], h4: [18, 20] },\n    mobile: { h3: [30, 20], h4: [12, 16] }\n  };\n  const ROOT = '.elementor-202648 .author-article';\n  const BLOCKS = 'p,li,h2,h3,h4,h5,h6,img,table,pre,blockquote,figure,iframe,video,.elementor-widget-image,.elementor-widget-button,.elementor-widget-html,.elementor-widget-video';\n  const touched = new Set();\n\n  const set = (el, prop, value) => {\n    el.style.setProperty(prop, value, 'important');\n    touched.add(el);\n  };\n\n  const reset = () => {\n    touched.forEach(el => ['margin-top', 'margin-bottom'].forEach(p => el.style.removeProperty(p)));\n    touched.clear();\n  };\n\n  const isFloating = el => {\n    for (let n = el; n && n !== document.body; n = n.parentElement) {\n      const pos = getComputedStyle(n).position;\n      if (pos === 'absolute' || pos === 'fixed') return true;\n    }\n    return false;\n  };\n\n  const overlapsX = (a, b) => {\n    const ra = a.getBoundingClientRect(), rb = b.getBoundingClientRect();\n    return Math.min(ra.right, rb.right) - Math.max(ra.left, rb.left) > 0;\n  };\n\n  const boxOf = (b, h, root) => {\n    if (b.closest('.elementor-widget-text-editor')) return b;\n    let top = b.closest('.elementor-widget') || b;\n    for (let n = top.parentElement; n && n !== root && !n.contains(h); n = n.parentElement) {\n      if (n.matches('.e-con')) top = n;\n    }\n    return top;\n  };\n\n  const neighbour = (blocks, h, dir, root) => {\n    for (let i = blocks.indexOf(h) + dir; i >= 0 && i < blocks.length; i += dir) {\n      const b = blocks[i];\n      if (b.contains(h) || h.contains(b)) continue;\n      const box = boxOf(b, h, root);\n      if (overlapsX(box, h)) return box;\n    }\n    return null;\n  };\n\n  const gap = (h, prev, next) => {\n    const r = h.getBoundingClientRect();\n    return [\n      prev ? r.top - prev.getBoundingClientRect().bottom : null,\n      next ? next.getBoundingClientRect().top - r.bottom : null\n    ];\n  };\n\n  const run = () => {\n    const root = document.querySelector(ROOT);\n    if (!root) return;\n    reset();\n    const mode = innerWidth <= 767 ? 'mobile' : innerWidth <= 1024 ? 'tablet' : 'desktop';\n    const blocks = [...root.querySelectorAll(BLOCKS)].filter(b => b.offsetParent && b.getBoundingClientRect().height > 0 && !isFloating(b));\n    const heads = blocks.filter(b => \/^H[34]$\/.test(b.tagName) && b.closest('.elementor-widget-text-editor') && !b.closest('.no-auto-spacing'));\n    const plan = heads.map(h => {\n      const [top, bottom] = SPACING[mode][h.tagName.toLowerCase()];\n      const widget = h.closest('.elementor-widget');\n      const before = h.previousElementSibling, after = h.nextElementSibling;\n      if (before) { set(before, 'margin-bottom', '0px'); set(h, 'margin-top', top + 'px'); }\n      else set(h, 'margin-top', '0px');\n      if (after) { set(after, 'margin-top', '0px'); set(h, 'margin-bottom', bottom + 'px'); }\n      else set(h, 'margin-bottom', '0px');\n      return { h, widget, top, bottom, fixTop: !before, fixBottom: !after };\n    });\n    for (let pass = 0; pass < 2; pass++) {\n      plan.forEach(p => {\n        const [t, b] = gap(p.h, neighbour(blocks, p.h, -1, root), neighbour(blocks, p.h, 1, root));\n        const cs = getComputedStyle(p.widget);\n        if (p.fixTop && t !== null && Math.abs(t - p.top) > 0.5) set(p.widget, 'margin-top', parseFloat(cs.marginTop) + p.top - t + 'px');\n        if (p.fixBottom && b !== null && Math.abs(b - p.bottom) > 0.5) set(p.widget, 'margin-bottom', parseFloat(cs.marginBottom) + p.bottom - b + 'px');\n      });\n    }\n  };\n\n  const centerOf = els => {\n    const rs = els.map(e => e.getBoundingClientRect()).filter(r => r.width || r.height);\n    if (!rs.length) return null;\n    const l = Math.min(...rs.map(r => r.left)), r = Math.max(...rs.map(r => r.right));\n    const t = Math.min(...rs.map(r => r.top)), b = Math.max(...rs.map(r => r.bottom));\n    return [(l + r) \/ 2, (t + b) \/ 2];\n  };\n\n  const alignWaves = () => {\n    document.querySelectorAll('.elementor-202648 .cta2').forEach(cta => {\n      const btn = cta.querySelector('.elementor-button');\n      const holder = cta.querySelector('.elementor-absolute:has(.wave-container)');\n      if (!btn || !holder) return;\n      holder.style.removeProperty('translate');\n      const w = centerOf([...holder.querySelectorAll('.wave')]);\n      const b = centerOf([btn]);\n      if (!w || !b) return;\n      holder.style.setProperty('translate', `${Math.round(b[0] - w[0])}px 0px`, 'important');\n    });\n  };\n\n  const all = () => { run(); alignWaves(); };\n  let timer;\n  const schedule = () => { clearTimeout(timer); timer = setTimeout(all, 100); };\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', all); else all();\n  addEventListener('load', all);\n  if (document.fonts) document.fonts.ready.then(all);\n  addEventListener('resize', schedule);\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"related_content_blog_container\">[related_content_list]<\/div><script>\n            jQuery( document ).ready(function($) {\n            var parentSection = $('[data-elementor-type=\"wp-page\"]');\n            if($('[data-elementor-type=\"wp-post\"]').length){\n                var parentSection = $('[data-elementor-type=\"wp-post\"]');\n            }\n            \n                parentSection.children().last().before($('.related_content_blog_container'));\n            });\n            <\/script><div class=\"other_services_container\">[need_other_services_v2]<\/div><script>\n                    jQuery( document ).ready(function($) {\n                        var parentSection = $('[data-elementor-type=\"wp-page\"]');\n                        if($('[data-elementor-type=\"wp-post\"]').length){\n                            var parentSection = $('[data-elementor-type=\"wp-post\"]');\n                        }\n                        \n                        console.log(parentSection);\n                        parentSection.children().last().before($('.other_services_container'));\n                        var sections = parentSection.find('.net-15.dt-16');\n                        for(var i = 0; i<sections.length; i++){\n                            if($(sections[i]).hasClass( 'net-15' ) && $(sections[i]).hasClass( 'dt-16' ) && $(sections[i]).hasClass( 'elementor-hidden-desktop' )==false){\n                                $(sections[i]).before($('.other_services_container'));   \n                            }\n                        }\n                        \n                    });\n                <\/script>","protected":false},"excerpt":{"rendered":"<p>PHP security checklist: 8 steps to find and fix vulnerabilities Nov 5, 2026 19 min read Key takeaways PHP2Shell requires urgent patching. On 21 October 2026, PHP fixed CVE-2026-109618 and CVE-2026-109619. Both are critical runtime vulnerabilities (CVSS v4.0: 9.2) that can allow unauthenticated remote code execution. Check the patched versions. The first fixed releases are [&hellip;]<\/p>\n","protected":false},"author":181,"featured_media":202650,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[128],"class_list":["post-202648","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-ai-ml","tag-back-end-development","tag-media-entertainment","tag-qa","tag-web"],"acf":[],"_links":{"self":[{"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/posts\/202648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/users\/181"}],"replies":[{"embeddable":true,"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/comments?post=202648"}],"version-history":[{"count":0,"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/posts\/202648\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/media\/202650"}],"wp:attachment":[{"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/media?parent=202648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/categories?post=202648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/innowise.com\/de\/wp-json\/wp\/v2\/tags?post=202648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}