Eli olen tehnyt sivuilleni lomakkeen jolla voi lisätä sivuille tietoa. Tieto tallennetaan .txt tiedostoon. Ongelma on se, että kun yritän liittää kuvia tai linkkejä esim. <a href="https://www.ohjelmointiputka.net">Ohjelmointiputka</a>
niin kun menen .txt tiedostoon niin siellä kyseinen linkki on muodossa <a href=\"https://www.ohjelmointiputka.net\">Ohjelmointiputka</a>, mistä seuraa, että se ei toimi.
Miten on mahdollista poistaa nuo turhat kenoviivat?
Tiedostoon kirjoitetaan ihan normaalilla kirjoitus funktiolla.
<ot> tuli vähän sekavasti</ot>
Tai
ini_set('magic_quotes_gpc', 'off')
,
niin pääsee kokonaan mokomasta ominaisuudesta.
En oikeen tajunnut miten.
Pystyykö tuon asettaa pois päältä php lomakkeessa, ja mihin väliin se pitää kirjoittaa?
ajv, toimiiko se suoraan ihan noin? Kun magic quotet on kuitenkin ajettu jo ennen itse skriptin tulkkaamista, joten ini-asetuksen ylikirjoitus on jo myöhäistä...
Ongelmahan siis on PHP:n Magic Quotes-asetus, joka automaattisesti "escapettaa" lainausmerkkejä jotta huonosti ohjelmoidut sivut eivät sisältäisi tietokannan injektiomahdollisuutta, joka on varmastikin yksi yleisimpiä nettipuolen tietoturva-aukkoja.
Laitapa tallennusskriptin alkuun vaikka tälläinen:
<?php if (get_magic_quotes_gpc() === 1) { foreach($_POST as $id => $value) { $_POST[$id] = stripslashes($value); } foreach($_GET as $id => $value) { $_GET[$id] = stripslashes($value); } unset($id, $value); } ?>
Ei todellakaan elegantti ratkaisu, mutta pitäisi poistaa ne ylimääräiset kenoviivat niistä $_POST ja $_GET taulukoista. Paljon fiksumpi ratkaisu sitten taas on vaikka poistaa magic-quotesit .htaccess tiedostolla muuttamalla php:n asetuksia.
JTS kirjoitti:
ajv, toimiiko se suoraan ihan noin? Kun magic quotet on kuitenkin ajettu jo ennen itse skriptin tulkkaamista, joten ini-asetuksen ylikirjoitus on jo myöhäistä...
Totta turiset, en ajatellut noin pitkälle :)
https://www.php.net/manual/en/function.ini-set.php#22264
Eli .htaccesilla
php_flag magic_quotes_gpc off
Tai sitten joku oma viritys koodiin. JTS:n koodissa voisi vielä tarkistaa, että $_POST ja/tai $_GET -taulukot ovat olemassa, ettei tuu virhettä :)
ajv kirjoitti:
Tai sitten joku oma viritys koodiin. JTS:n koodissa voisi vielä tarkistaa, että $_POST ja/tai $_GET -taulukot ovat olemassa, ettei tuu virhettä :)
Njoo, mietinkin että oliko se niin että taulukot ovat aina olemassa, mutta ovat tyhjiä jos mitään ne eivät sisällä mutta en jaksanut kokeilla... Mutta eipä tuo muutenkaan kovin fiksu ratkaisu ole, kun esimerkiksi $_REQUEST-taulukkokin tuosta jäi pois... Mutta eiköhän siitä php:tä osaava idean saa selville.
Niinpäs onkin aina olemassa, ehkä parempi olla loppupäivä hiljaa... Meinasin tämänkin viestin moderoida JTS:n viestin päälle aluks :)
Kiitos! Sain tällä koodilla toimimaan.
JTS kirjoitti:
Laitapa tallennusskriptin alkuun vaikka tälläinen:
<?php if (get_magic_quotes_gpc() === 1) { foreach($_POST as $id => $value) { $_POST[$id] = stripslashes($value); } foreach($_GET as $id => $value) { $_GET[$id] = stripslashes($value); } unset($id, $value); } ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.