Űrlapból webcím adat POST-al küldve 403-as hiba
2021-11-06T23:32:27+01:00
2021-11-07T09:23:32+01:00
2022-08-12T05:35:28+02:00
vandammee
Egy internetes folyóirat honlapot programoztam php+mysql környezetben. Egy olyan probléma merült fel, hogy ha a regisztrációs űrlapon egy input text mezőbe https://-el kezdődő szöveget írnak be, akkor az űrlap mentése sikertelen lesz, és egyrészt a 403-as hibát valamint a "Forbidden
 You don't have permission to access this resource." üzenetet kapom.
Az űrlap adatokat POST-tal küldöm az űrlapfeldolgozó és adatlementő php kódnak.

Még inkább bonyolítja a dolgokat, hogy a saját gépemre feltett xampp alatt localhostban tökéletesen működik ilyen "https://" adat megadása esetén is az adatok lementése, illetve egy rendes szerverre feltett tesztkörnyezetben is, viszont azon a szerveren, ahol az éles honlap megy, ott a fenti Forbidden-es hibaüzenet van.

Gyanítom, hogy esetleg valami szerverbeállítás lehet az oka, vagy valami php.ini beállítás vagy apache beállítás.

Valaki esetleg találkozott ilyen jelenséggel?
Mutasd a teljes hozzászólást!
Tekintettel arra, hogy ennek a kódnak működnie kell, és csak bizonyos értékek okoznak HTTP 403 Forbidden response-t, azzal a vad feltételezéssel fogok élni, hogy egy bizonyos ModSecurity WAF (web application firewall) aktív a szerveren. Ennek van olyan képessége, hogy a POST adatokat szűri pl. SQL injection és más támadási módok megakadályozása érdekében. Ilyenkor vagy az történik, hogy a PHP az adott $_POST értéket NULL-ként kapja meg, vagy maga az Apache dob vissza HTTP 403-at.

Ha van olyan jogosultságod, hogy .htaccess fájlokkal módosítsd az Apache viselkedését, ezt érdemes megpróbálni, észben tartva ennek a kockázatát:

SecFilterEngine Off SecFilterScanPOST Off
Ha ez működik, akkor utána lehet tovább gondolkozni azon, hogy miképp finomhangoljuk a tűzfal szabályait, hogy az megfeleljen az igényeidnek.
Mutasd a teljes hozzászólást!

  • Azért biztos, ami biztos, nézzünk rá a kódra is szerintem. Apache és PHP logokban nem látszik semmi érdekesség egyébként?
    Mutasd a teljes hozzászólást!
  • Itt van alább egy kivonat, ami localhost-on tökéletesen működik olyan felhasználó által bevitt adattal is, ami https://-el kezdődik, viszont az éles szerveren 403-as forbidden hibaüzenetet ad, viszont másfajta bevitt adattal az éles rendszerben is jól működik.

    <?php if (isset($_POST['muv']) and $_POST['muv']=="mentes") { $opt=array(); $opt['db']='adatbazisnev'; $opt['host']='127.0.0.1'; $opt['charset']='utf8'; $opt['user']='usernev'; $opt['pass']='jelszo'; $dsn='mysql:dbname='.$opt['db'].';host='.$opt['host'].';charset='.$opt['charset']; $conn=new PDO($dsn, $opt['user'], $opt['pass']); $conn->exec("set names utf8"); $rawsql="update user set degree= :sdegree where azonosito= :sazonosito"; $stmt=$conn->prepare($rawsql); $stmt->bindValue(':sdegree', $_POST['degree']); $stmt->bindValue(':sazonosito', 'aaaaaaaaaa' ); $stmt-> execute(); } else { $ki="<form action="".$_SERVER['PHP_SELF']."" method="post"><input type="hidden" name="muv" value="mentes">". "<input type="text" name="degree" value=""> <input type="submit" name="kuldes" value="MENTES"></form>"; echo $ki; } ?>
    Mutasd a teljes hozzászólást!
  • Tekintettel arra, hogy ennek a kódnak működnie kell, és csak bizonyos értékek okoznak HTTP 403 Forbidden response-t, azzal a vad feltételezéssel fogok élni, hogy egy bizonyos ModSecurity WAF (web application firewall) aktív a szerveren. Ennek van olyan képessége, hogy a POST adatokat szűri pl. SQL injection és más támadási módok megakadályozása érdekében. Ilyenkor vagy az történik, hogy a PHP az adott $_POST értéket NULL-ként kapja meg, vagy maga az Apache dob vissza HTTP 403-at.

    Ha van olyan jogosultságod, hogy .htaccess fájlokkal módosítsd az Apache viselkedését, ezt érdemes megpróbálni, észben tartva ennek a kockázatát:

    SecFilterEngine Off SecFilterScanPOST Off
    Ha ez működik, akkor utána lehet tovább gondolkozni azon, hogy miképp finomhangoljuk a tűzfal szabályait, hogy az megfeleljen az igényeidnek.
    Mutasd a teljes hozzászólást!
  • Kedves H.Lilla!

    Nagyon köszönöm válaszodat!!! Én nem vagyok rendszergazda, úgyhogy erre nem is gondoltam, de azt tudom, hogy valami védelmet a rendszergazdánk feltett a támadások ellen, amire mindig csak úgy hivatkozott, hogy "mod". Lehet pont az, amit írtál. 
    Úgyhogy szerintem szinte biztos, hogy az lesz az oka, amit írtál.
    Továbbítom a hozzászólásod a rendszergazdánknak.

    Nagyon hálás vagyok segítségedért.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd