Apsauga nuo kenksmingo PHP kodo
Parašė Rytis 2007 liepos 7 13:07:10
Taigi, šiandien perskaičiau ozzWANTED rašytą straipsnį apie fusion apsaugą, ir nusprendžiau šiek tiek perdaryti kai kuriuos PHP-fusion failus.
Dažnai panelėse ir pridėtiniuose puslapiuose PHP nėra naudojamas, o tai yra bereikalinga rizika. Paskaitęs ozzWANTED patarimą ištrinti failus: custom_pages.php ir panel_editor.php aš juos perdariau taip, kad per juos būtų neįmanoma vykdyti PHP kodo (išėmiau eval funkcijas). Taigi, jei norite bent šiek tiek apsaugoti puslapį, galite atnaujinti failus. Nepamirškite, kad PHP kodo vykdyti nebegalėsite net jūs. TIK HTML.

Šis patobulinimas pritaikomas 6.01.11 versijai, tačiau turėtu veikti ir žemesnėms. Jei Jūsų versija žemesnė nei 6.01.11, rekomenduoju bent maincore.php kodo įterpinį įvesti ranka, o nepakeisti failą.

-----------------------------------------------------------------------

Atnaujinimas: 2007-07-09, galima naudoti konstantas
Patogumo dėlei perdariau scriptą, nuo šiol galės naudoti {{basedir}} kaip konstantą,
pvz.:
<a href="{{basedir}}kelias/iki/failo.php">failas.php</a>
<img src="{{basedir}}images/kelias/iki/paveiksliuko.jpg">


ir kt.

-----------------------------------------------------------------------

Atnaujinimas: 2007-07-12

Prie šablono {{basedir}} vieno žmogaus pageidavimu pridėtas laiko ir slapyvardžio šablonas.
Laikas atvaizduojamas šablonu {{time}}
$rtzDateFormat="H:i / Y-m-d";



Slapyvardis būs rodomas to žmogaus, kuris peržiūrinėja tą puslapį, šablonas: {{nick}}

-----------------------------------------------------------------------

Pavyzdys (kad rodytų slapyvardį, užsiregistruokite/prisijunkite).

-----------------------------------------------------------------------

Šiuo metu veikiantys šablonai:

{{basedir}} - veikia kaip konstanta BASEDIR
{{nick}} - rodomas slapyvardis žmogaus, kuris naršo puslapyje.
{{time}} rodomas laikas (formato nustatymas 350 eilutėje)


-----------------------------------------------------------------------

Taigi, redaguosime šiuos failus:
1. side_left.php
2. side_right.php
3. viewpage.php
4. administration/custom_pages.php
5. administration/panel_editor.php
6. maincore.php

1. side_left.php
Atsidarykite failą ir susiraskite 25 eilutę, kurioje turėtų būti:
eval(stripslashes($p_data['panel_content']));



pakeiskite tai į
openside($p_data['panel_name']);
  echo stripslashes(rtz($p_data['panel_content']));
closeside();




Susiraskite 45 eilutę, kurioje turėtu būti
eval(stripslashes($p_data['panel_content']));



ir taip pat pakeiskite į
openside($p_data['panel_name']);
  echo stripslashes(rtz($p_data['panel_content']));
closeside();



Išsaugokite, uždarykite ir įkelkite failą.


2. side_right.php
Atsidarykite failą ir susiraskite 25 eilutę, kurioje turėtų būti:
eval(stripslashes($p_data['panel_content']));



pakeiskite tai į
openside($p_data['panel_name']);
  echo stripslashes(rtz($p_data['panel_content']));
closeside();




Susiraskite 45 eilutę, kurioje turėtu būti
eval(stripslashes($p_data['panel_content']));



ir taip pat pakeiskite į
openside($p_data['panel_name']);
  echo stripslashes(rtz($p_data['panel_content']));
closeside();



Išsaugokite, uždarykite ir įkelkite failą.

3. viewpage.php
Atidarykite failą ir suraskite 26 eilutę, kurioje turėtų būti
eval("?>".stripslashes($data['page_content'])."<?php ");



pakeiskite tai į
echo rtz(stripslashes($data['page_content']));



Išsaugokite, uždarykite ir įkelkite failą.

4. administration/custom_pages.php
Atidarykite failą ir suraskite 71 eilutę, kurioje turėtų būti
eval("?>".$page_content."<?php ");



pakeiskite tai į
echo rtz($page_content);




5. administration/panel_editor.php
Atidarykite failą ir suraskite 111 eilutę, kurioje turėtų būti
eval($panel_content);



pekeiskite į
echo rtz($panel_content);




Suraskite 139 eilutę, kurioje turėtų būti
$panel_content = "openside(\"name\");\n"."  echo \"content\";\n"."closeside();";



pakeiskite į
$panel_content = "";




6. maincore.php
Susiraskite 348 eilutę, kurioje turėtų būti
return $smiles;
}



po šiuo kodu ĮTERPKITE

function rtz($text) {
   global $userdata;
   $text = str_replace("{{basedir}}", BASEDIR, $text);

   $text = str_replace("{{nick}}", $userdata['user_name'], $text);

   $text = str_replace("{{time}}", date("H:i / Y-m-d"), $text);

   return $text;
   }





Baigta, dabar Jūsų puslapis būs bent šiek tiek apsaugotas nuo, pvz. visų failų ištrynimo, ar sakykime duomenų bazės slaptažodžio sužinojimo.

SVARBU:
PAVEIKSLIUKAS
openside("name"); echo "content"; closeside();


naudoti nebereiks, todėl teks perdaryti jau esamas paneles Jūsų puslapyje, t.y. panaikinti
openside("name"); echo "content"; closeside();



ir palikti tik HTML kodą.

Jei kils neaiškumų, kreipkitės.

Kol kas nenusprendžiau, kaip reikėtų perdaryti settings_forum.php failą.
Jei pastebėsite klaidų, prašau pranešti.

FAILAI:php-files.zip
Sukūrė: Rytis aka Rtz, autorinės teisės perduodamos webdnd.com