Pereiti prie turinio

Mysql column klaida


Rekomenduojami pranešimai

Tai va susiduriau su tokia klaida ir nežinau kaip ja iškresti.

 

žmones kurdami tema ir irasšydami i description skilti savo texsta atrodo viskas gerai. Bet atsiranda gudručiu kurie i description skilti irašo script url, tada visa mano tinklapi nukreipia i jo nurodyta tinklapi.

 

pvz kažkas panašaus:

<script src="gudručio tinklapis"></script>

 

mysql description column atrodo taip:

`description` text NOT NULL,

 

Čia kaltas php koduotė ar column?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tipinė XSS spraga. Kai išvedinėji turinį iš duomenų bazės, išvedinėk ne

echo $turinys;

, bet

echo htmlspecialchars($turinys);

 

Funkcija pakeis visokius <, >, ' ir kitus spec. ženklus jų atitinkamais HTML kodais, ir jie bus atvaizduojami korektiškai. Output'ą visada reikia labai kruopščiai filtruoti. Kaip ir input'ą. Prašom užeiti čia.

Redagavo vitalikaz
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Daugiau informacijos, nes nieko nesupratau :)

 

Praleisk visa informacija kuria irasineji i description pro sitas funkcijas ir tik tada irasyk i duomenu baze :)

 

Cia visus special simbolius pakeis i ju kuodote, o tas kitas sudes slashus pries kabutes ir jo kodas neveiksmingas bus.

Redagavo TheChosenOne
Nuoroda į pranešimą
Dalintis kituose puslapiuose

if ($query->rowCount() > 0) {
	$server_data = $query->fetch();
	$allow_vote_banners = true;
} else {

	$server_data['description'] = read_session('description');

}

 

Ištraukiau iš php koda, parodyk kaip padarytum tu. Ateiti žinosčiau kaip reikės. Ačiu už pagalba.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

function apsauga($post){
$post = htmlspecialchars($post);
$search = array('|',  '$', '\\', '^', '%', '`', "\0", "\x00", "\x1A");
$replace = array('|',  '$', '\', '^', '%', '`', '', '', ''); // cia isvest turi pvz  169;, atvaizduoja cia tokius kodus :)
$post = str_replace($search, $replace, $post);
$post = trim($post);
$post = mysql_real_escape_string($post);
$post = strip_tags($post);
return $post;
}

sita funkcija gali naudoti pries irasant i sql. gali dar apsidraust ir isvedant is mysql (real escape nereiktu tokio atvejiu)

 

p.s jei nori kad irasytu tarkim tik skaicius, tik didziasias raides ir t.t ir t.t naudok preg_replace.

Redagavo synkas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

function apsauga($post){
$post = htmlspecialchars($post);
$search = array('|',  '$', '\\', '^', '%', '`', "\0", "\x00", "\x1A");
$replace = array('|',  '$', '\', '^', '%', '`', '', '', ''); // cia isvest turi pvz  169;, atvaizduoja cia tokius kodus :)
$post = str_replace($search, $replace, $post);
$post = trim($post);
$post = mysql_real_escape_string($post);
$post = strip_tags($post);
return $post;
}

sita funkcija gali naudoti pries irasant i sql. gali dar apsidraust ir isvedant is mysql (real escape nereiktu tokio atvejiu)

 

p.s jei nori kad irasytu tarkim tik skaicius, tik didziasias raides ir t.t ir t.t naudok preg_replace.

NE.

 

Baisu. Išnagrinėkim po vieną funkciją.

 

htmlspecialchars – turėtų būti naudojamas atvaizdavimo metu. Duomenų bazėje visada turi būti laikomi tikri duomenys, o ne išescapinti vienam ar kitam formatui.

str_replace – kam keisti tuos? Į formą nesukiš vis tiek NUL baito normaliai, visa kita keičiama beprasmiškai.

trim – ok.

real_escape – reikia naudoti ne ext/mysql, o PDO ar (mysqli) ir jų prepared statements.

strip_tags – atleiskit už žodyną, bet na..ui? Atvaizdavimo metu metant htmlspecialchars ir taip nebeliks kaip įkišti XSS. O jei tavo vartotojas norės parašyti HTML pavyzdį (be atvaizdavimo, tiesiog kaip gryną tekstą)? Ims juk ir ištrins visus tagus jau jam postinant. Čia, aišku, imu strip_tags veikimą atskirai. Jai išvis nebeliks ką veikti, kai vykdai kaip dabar, jau po htmlspecialchars...

 

Nesąmonė. Negalima kurti vienoje funkcijoje ir duomenų bazei paruošimo, ir atvaizdavimui, ir dar kažkokių dalykų.

 

Viskas, ko reikia autoriui šiuo atveju, yra XSS apsauga (htmlspecialchars) išvedimo metu.

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

NE.

 

Baisu. Išnagrinėkim po vieną funkciją.

 

htmlspecialchars – turėtų būti naudojamas atvaizdavimo metu. Duomenų bazėje visada turi būti laikomi tikri duomenys, o ne išescapinti vienam ar kitam formatui.

str_replace – kam keisti tuos? Į formą nesukiš vis tiek NUL baito normaliai, visa kita keičiama beprasmiškai.

trim – ok.

real_escape – reikia naudoti ne ext/mysql, o PDO ar (mysqli) ir jų prepared statements.

strip_tags – atleiskit už žodyną, bet na..ui? Atvaizdavimo metu metant htmlspecialchars ir taip nebeliks kaip įkišti XSS. O jei tavo vartotojas norės parašyti HTML pavyzdį (be atvaizdavimo, tiesiog kaip gryną tekstą)? Ims juk ir ištrins visus tagus jau jam postinant. Čia, aišku, imu strip_tags veikimą atskirai. Jai išvis nebeliks ką veikti, kai vykdai kaip dabar, jau po htmlspecialchars...

 

Nesąmonė. Negalima kurti vienoje funkcijoje ir duomenų bazei paruošimo, ir atvaizdavimui, ir dar kažkokių dalykų.

 

Viskas, ko reikia autoriui šiuo atveju, yra XSS apsauga (htmlspecialchars) išvedimo metu.

na seip as ir neliepiau naudoti visu funkciju (maniau jeigu domisi kurimu pasidomes ar reikalinga, ar nereikalinga), ir beto del real reikia tai ne man sakyti, o autoriui. jis naudoja mysql o as tik parasiau apsaugos funkcija. bet malonu kad pataisei, pravers ir man is geriau zinancio zmogaus ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

ir beto del real reikia tai ne man sakyti, o autoriui. jis naudoja mysql o as tik parasiau apsaugos funkcija.

Na kad kaip tik sprendžiant iš kodo dalies, autorius naudoja PDO, kaip ir turi būti. Aišku nesimato ar naudoja prepared statement'us, bet ext/mysql nuo PDO gi gan lengva atskirt :)

Redagavo vitalikaz
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...