Polish Bittorrent Tracker Support

  • Maj 18, 2012, 03:29:10
  • Witamy, Gość
Zaloguj się lub zarejestruj.

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Szukanie zaawansowane  

Aktualności:

Autor Wątek: Bezpieczny tracker  (Przeczytany 3817 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

MrVirago

  • Super zaawansowany
  • ******
  • Reputacja 20
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 584
Bezpieczny tracker
« dnia: Styczeń 29, 2007, 10:05:55 »

Postanowiłem, napisać mały spis tutorial, zabezpieczeń jakie znalazłem bądź sam zrobiłem.

1. Modyfikacja zapobiega przechwyceniu sesji i dopisuje IP do hasła przed zahashowaniem.

otwórz plik takelogin.php

znajdź
logincookie($row["id"], $row["passhash"]);
zamień na
$passh = md5($row["passhash"].$_SERVER["REMOTE_ADDR"]);
logincookie($row["id"], $passh);

otwórz plik bittorrent.php funkcja userlogin()

znajdź
if ($_COOKIE["pass"] !== $row["passhash"])
zamień na
if ($_COOKIE["pass"] !== md5($row["passhash"].$_SERVER["REMOTE_ADDR"]))
otwórz plik takeprofedit.php

znajdź
logincookie($CURUSER["id"], $passhash);
zamień na
logincookie($CURUSER["id"], md5($passhash.$_SERVER["REMOTE_ADDR"]));
2.

utwórz plik ctracker.php i wrzuć go do katalogu /include
<?php

  $cracktrack 
$_SERVER['QUERY_STRING'];
  
$wormprotector = array('chr(''chr=''chr%20''%20chr''wget%20''%20wget''wget(',
'cmd=''%20cmd''cmd%20''rush=''%20rush''rush%20',
'union%20''%20union''union(''union=''echr(''%20echr''echr%20''echr=',
'esystem(''esystem%20''cp%20''%20cp''cp(''mdir%20''%20mdir''mdir(',
'mcd%20''mrd%20''rm%20''%20mcd''%20mrd''%20rm',
'mcd(''mrd(''rm(''mcd=''mrd=''mv%20''rmdir%20''mv(''rmdir(',
'chmod(''chmod%20''%20chmod''chmod(''chmod=''chown%20''chgrp%20''chown(''chgrp(',
'locate%20''grep%20''locate(''grep(''diff%20''kill%20''kill(''killall',
'passwd%20''%20passwd''passwd(''telnet%20''vi(''vi%20',
'insert%20into''select%20''nigga(''%20nigga''nigga%20''fopen''fwrite''%20like''like%20',
'$_request''$_get''$request''$get''.system''HTTP_PHP''&aim''%20getenv''getenv%20',
'new_password''&icq','/etc/password','/etc/shadow''/etc/groups''/etc/gshadow',
'HTTP_USER_AGENT''HTTP_HOST''/bin/ps''wget%20''uname\x20-a''/usr/bin/id',
'/bin/echo''/bin/kill''/bin/''/chgrp''/chown''/usr/bin''g\+\+''bin/python',
'bin/tclsh''bin/nasm''perl%20''traceroute%20''ping%20''/usr/X11R6/bin/xterm''lsof%20',
'/bin/mail''.conf''motd%20''HTTP/1.''.inc.php''config.php''cgi-''.eml',
'file\://''window.open''<script>''javascript\://','img src''img%20src','.jsp','ftp.exe',
'xp_enumdsn''xp_availablemedia''xp_filelist''xp_cmdshell''nc.exe''.htpasswd',
'servlet''/etc/passwd''wwwacl''~root''~ftp''.js''.jsp''admin_''.history',
'bash_history''.bash_history''~nobody''server-info''server-status''reboot%20''halt%20',
'powerdown%20''/home/ftp''/home/www''secure_site, ok''chunked''org.apache''/servlet/con',
'<script''/robot.txt' ,'/perl' ,'mod_gzip_status''db_mysql.inc''.inc''select%20from',
'select from''drop%20''.system''getenv''http_''_php''php_''phpinfo()''<?php'?>
', 'sql=');

  $checkworm = str_replace($wormprotector, '*', $cracktrack);

  if ($cracktrack != $checkworm)
        {
          $cremotead = $_SERVER['REMOTE_ADDR'];
          $cuseragent = $_SERVER['HTTP_USER_AGENT'];

      $fp = fopen ('./log.txt', 'a');
      fwrite ($fp, 'Blocked attack from: IP - ' . $_SERVER['REMOTE_ADDR'] . ' User Agent - ' . $_SERVER['HTTP_USER_AGENT'] . '
');
      fclose ($fp);

          die( "Wykryto atak! <br /><br /><b>Twój atak został zablokowany:</b><br />$cremotead - $cuseragent" );
        }

//
// End CrackerTracker StandAlone
//

?>

otwórz plik bittorrent.php

znajdź
<?
dodaj po tym
include "ctracker.php";
utwórz jeszcze plik log.txt i wrzuć go również do katalogu /include, nadaj mu chmody na 777

3.

utwórz plik class.inputfilter_clean.php i wrzuć go do katalogu /include
<?php
class InputFilter {
var $tagsArray;
var $attrArray;
var $tagsMethod;
var $attrMethod;
var $xssAuto;
var $tagBlacklist = array('applet''body''bgsound''base''basefont''embed''frame''frameset''head''html''id''iframe''ilayer''layer''link''meta''name''object''script''style''title''xml');
var $attrBlacklist = array('action''background''codebase''dynsrc''lowsrc');
function inputFilter($tagsArray = array(), $attrArray = array(), $tagsMethod 0$attrMethod 0$xssAuto 1) {
for ($i 0$i count($tagsArray); $i++) $tagsArray[$i] = strtolower($tagsArray[$i]);
for ($i 0$i count($attrArray); $i++) $attrArray[$i] = strtolower($attrArray[$i]);
$this->tagsArray = (array) $tagsArray;
$this->attrArray = (array) $attrArray;
$this->tagsMethod $tagsMethod;
$this->attrMethod $attrMethod;
$this->xssAuto $xssAuto;
}
function process($source) {
if (is_array($source)) {
foreach($source as $key => $value)
if (is_string($value)) $source[$key] = $this->remove($this->decode($value));
return $source;
} else if (is_string($source)) {
return $this->remove($this->decode($source));
} else return $source;
}
function remove($source) {
$loopCounter=0;
while($source != $this->filterTags($source)) {
$source $this->filterTags($source);
$loopCounter++;
}
return $source;
}
function filterTags($source) {
$preTag NULL;
$postTag $source;
$tagOpen_start strpos($source'<');
while($tagOpen_start !== FALSE) {
$preTag .= substr($postTag0$tagOpen_start);
$postTag substr($postTag$tagOpen_start);
$fromTagOpen substr($postTag1);
$tagOpen_end strpos($fromTagOpen'>');
if ($tagOpen_end === false) break;
$tagOpen_nested strpos($fromTagOpen'<');
if (($tagOpen_nested !== false) && ($tagOpen_nested $tagOpen_end)) {
$preTag .= substr($postTag0, ($tagOpen_nested+1));
$postTag substr($postTag, ($tagOpen_nested+1));
$tagOpen_start strpos($postTag'<');
continue;

$tagOpen_nested = (strpos($fromTagOpen'<') + $tagOpen_start 1);
$currentTag substr($fromTagOpen0$tagOpen_end);
$tagLength strlen($currentTag);
if (!$tagOpen_end) {
$preTag .= $postTag;
$tagOpen_start strpos($postTag'<');
}
$tagLeft $currentTag;
$attrSet = array();
$currentSpace strpos($tagLeft' ');
if (substr($currentTag01) == "/") {
$isCloseTag TRUE;
list($tagName) = explode(' '$currentTag);
$tagName substr($tagName1);
} else {
$isCloseTag FALSE;
list($tagName) = explode(' '$currentTag);
}
if ((!preg_match("/^[a-z][a-z0-9]*$/i",$tagName)) || (!$tagName) || ((in_array(strtolower($tagName), $this->tagBlacklist)) && ($this->xssAuto))) { 
$postTag substr($postTag, ($tagLength 2));
$tagOpen_start strpos($postTag'<');
continue;
}
while ($currentSpace !== FALSE) {
$fromSpace substr($tagLeft, ($currentSpace+1));
$nextSpace strpos($fromSpace' ');
$openQuotes strpos($fromSpace'"');
$closeQuotes strpos(substr($fromSpace, ($openQuotes+1)), '"') + $openQuotes 1;
if (strpos($fromSpace'=') !== FALSE) {
if (($openQuotes !== FALSE) && (strpos(substr($fromSpace, ($openQuotes+1)), '"') !== FALSE))
$attr substr($fromSpace0, ($closeQuotes+1));
else $attr substr($fromSpace0$nextSpace);
} else $attr substr($fromSpace0$nextSpace);
if (!$attr$attr $fromSpace;
$attrSet[] = $attr;
$tagLeft substr($fromSpacestrlen($attr));
$currentSpace strpos($tagLeft' ');
}
$tagFound in_array(strtolower($tagName), $this->tagsArray);
if ((!$tagFound && $this->tagsMethod) || ($tagFound && !$this->tagsMethod)) {
if (!$isCloseTag) {
$attrSet $this->filterAttr($attrSet);
$preTag .= '<' $tagName;
for ($i 0$i count($attrSet); $i++)
$preTag .= ' ' $attrSet[$i];
if (strpos($fromTagOpen"</" $tagName)) $preTag .= '>';
else $preTag .= ' />';
    } else $preTag .= '</' $tagName '>';
}
$postTag substr($postTag, ($tagLength 2));
$tagOpen_start strpos($postTag'<');
}
$preTag .= $postTag;
return $preTag;
}
function filterAttr($attrSet) {
$newSet = array();
for ($i 0$i <count($attrSet); $i++) {
if (!$attrSet[$i]) continue;
$attrSubSet explode('='trim($attrSet[$i]));
list($attrSubSet[0]) = explode(' '$attrSubSet[0]);
if ((!eregi("^[a-z]*$",$attrSubSet[0])) || (($this->xssAuto) && ((in_array(strtolower($attrSubSet[0]), $this->attrBlacklist)) || (substr($attrSubSet[0], 02) == 'on')))) 
continue;
if ($attrSubSet[1]) {
$attrSubSet[1] = str_replace('&#38;#'''$attrSubSet[1]);
$attrSubSet[1] = preg_replace('/\s+/'''$attrSubSet[1]);
$attrSubSet[1] = str_replace('"'''$attrSubSet[1]);
if ((substr($attrSubSet[1], 01) == "'") && (substr($attrSubSet[1], (strlen($attrSubSet[1]) - 1), 1) == "'"))
$attrSubSet[1] = substr($attrSubSet[1], 1, (strlen($attrSubSet[1]) - 2));
$attrSubSet[1] = stripslashes($attrSubSet[1]);
}
if ( ((strpos(strtolower($attrSubSet[1]), 'expression') !== false) && (strtolower($attrSubSet[0]) == 'style')) ||
(strpos(strtolower($attrSubSet[1]), 'javascript:') !== false) ||
(strpos(strtolower($attrSubSet[1]), 'behaviour:') !== false) ||
(strpos(strtolower($attrSubSet[1]), 'vbscript:') !== false) ||
(strpos(strtolower($attrSubSet[1]), 'mocha:') !== false) ||
(strpos(strtolower($attrSubSet[1]), 'livescript:') !== false
) continue;
$attrFound in_array(strtolower($attrSubSet[0]), $this->attrArray);
if ((!$attrFound && $this->attrMethod) || ($attrFound && !$this->attrMethod)) {
if ($attrSubSet[1]) $newSet[] = $attrSubSet[0] . '="' $attrSubSet[1] . '"';
else if ($attrSubSet[1] == "0"$newSet[] = $attrSubSet[0] . '="0"';
else $newSet[] = $attrSubSet[0] . '="' $attrSubSet[0] . '"';
}
}
return $newSet;
}
function decode($source) {
$source html_entity_decode($sourceENT_QUOTES"ISO-8859-1");
$source preg_replace('/&#38;#(\d+);/me',"chr(\\1)"$source);
$source preg_replace('/&#38;#x([a-f0-9]+);/mei',"chr(0x\\1)"$source);
return $source;
}
function safeSQL($source, &$connection) {
if (is_array($source)) {
foreach($source as $key => $value)
if (is_string($value)) $source[$key] = $this->quoteSmart($this->decode($value), $connection);
return $source;
} else if (is_string($source)) {
if (is_string($source)) return $this->quoteSmart($this->decode($source), $connection);
} else return $source;
}
function quoteSmart($source, &$connection) {
if (get_magic_quotes_gpc()) $source stripslashes($source);
$source $this->escapeString($source$connection);
return $source;
}
function escapeString($string, &$connection) {
if (version_compare(phpversion(),"4.3.0""<")) mysql_escape_string($string);
else mysql_real_escape_string($string);
return $string;
}
}
?>

otwórz plik bittorrent.php

znajdź
include "ctracker.php";
dodaj po tym
require_once("class.inputfilter_clean.php");
$myFilter = new InputFilter($tags, $attributes, 0, 0); // Invoke it

// works with strings or arrays of strings
$_POST = $myFilter->process($_POST);
$_GET["name"] = $myFilter->process($_GET["name"]);

3. System zabezpiecza przed włamaniem, jeśli ktoś da sobie np. sysopa automatycznie dostaje bana i nie ma nigdzie dostępu

otwórz plik bittorrent.php

znajdź
require_once("secrets.php");
require_once("cleanup.php");

dodaj po tym
//---------------------------------
//---- Max. Sysops v0.2 by xam
//---------------------------------

function maxsysop () {
global $CURUSER;
$lmaxclass  = 5; // Minimalna ranga od jakiej ma to obowiazywac (zalecam, mod, admin, sysop, czyli podajemy numerek jaki ma moderator)
$lsysopnames = array("Sysop", "admin", "mod", "mod2"); // Lista osób ktore sa leganie w zalodze.
    if ($CURUSER["class"] >= $lmaxclass)
        if (!in_array($CURUSER["username"], $lsysopnames)){
        mysql_query("UPDATE users set enabled='no' WHERE id=$CURUSER[id]");
            stderr("Przepraszamy","Korzystasz z nie dozwolonego konta, dlatego zostałe¶ zbanowany, papa :)");
}
}

//---------------------------------
//---- Max. Sysops v0.2 by xam
//---------------------------------


i dodaj w plikach do których ma dostęp tylko załoga

maxsysop ();
dodaj to zaraz po
require "include/bittorrent.php";
dbconn();

4. Te zmiany zabezpieczają przed przejęciem passhash'a, zabezpiecza ciasteczka, dodaje jeszcze jedno.

otwórz plik bittorrent.php

znajdź
/*
function logincookie($id, $password, $secret, $updatedb = 1, $expires = 0x7fffffff) {
    $md5 = md5($secret . $password . $secret);
    setcookie("uid", $id, $expires, "/");
    setcookie("pass", $md5, $expires, "/");

    if ($updatedb)
        mysql_query("UPDATE users SET last_login = NOW() WHERE id = $id");
}
*/

dodaj przed tym
function hashit($var,$addtext="")
{
        return md5("Some ".$addtext.$var.$addtext." text to mix the hash...");
}
znajdź
function logincookie($id, $passhash, $updatedb = 1, $expires = 0x7fffffff)
{
        setcookie("uid", $id, $expires, "/");
        setcookie("pass", $passhash, $expires, "/");

  if ($updatedb)
          mysql_query("UPDATE users SET last_login = NOW() WHERE id = $id");
}


function logoutcookie() {
    setcookie("uid", "", 0x7fffffff, "/");
    setcookie("pass", "", 0x7fffffff, "/");
}

zamień na
function logincookie($id, $passhash, $updatedb = 1, $expires = 0x7fffffff)
{
    setcookie("uid", $id, $expires, "/");
    setcookie("pass", $passhash, $expires, "/");
    setcookie("hashv", hashit($id,$passhash), $expires, "/");

  if ($updatedb)
      mysql_query("UPDATE users SET last_login = NOW() WHERE id = $id");
}


function logoutcookie() {
    setcookie("uid", "", 0x7fffffff, "/");
    setcookie("pass", "", 0x7fffffff, "/");
    setcookie("hashv", "", 0x7fffffff, "/");
}

znajdź
if (!$SITE_ONLINE || empty($_COOKIE["uid"]) || empty($_COOKIE["pass"]))
        return;
    $id = 0 + $_COOKIE["uid"];
    if (!$id || strlen($_COOKIE["pass"]) != 32)
        return;

zamień na
if (!$SITE_ONLINE || empty($_COOKIE["uid"]) || empty($_COOKIE["pass"]) || empty($_COOKIE["hashv"]))
        return;
    $id = 0 + $_COOKIE["uid"];
    if (!$id OR (strlen($_COOKIE["pass"]) != 32) OR ($_COOKIE["hashv"] != hashit($id,$_COOKIE["pass"])))
        return;

5. i Teraz dziury w plikach.

otwórz plik adduser.php

znajdź
header("Location: $BASEURL/userdetails.php?id=$arr[0]");
zamień na
header("Location: $BASEURL/userdetails.php?id=".htmlspecialchars($arr[0]));
otwórz plik comment.php

znajdź
$returnto = $_POST["returnto"];
zamień na
$returnto =  htmlentities($_POST["returnto"]) ? htmlentities($_POST["returnto"]) : htmlentities($_SERVER["HTTP_REFERER"]);
znajdź
value=\"" . $_SERVER["HTTP_REFERER"] . "\" />\n");
zamień na
value=\"" . htmlentities($_SERVER["HTTP_REFERER"]) . "\" />\n");
znajdź
$returnto = $_GET["returnto"];
zamień na
$returnto = $_GET["returnto"] ? htmlentities($_GET["returnto"]) : htmlentities($_SERVER["HTTP_REFERER"]);
znajdź
$returnto = $_SERVER["HTTP_REFERER"];
zamień na
$returnto =  htmlentities($_SERVER["HTTP_REFERER"]);
otwórz plik forums.php

znajdź
$action = $_GET["action"];
zamień na
$action = htmlspecialchars(trim($_GET["action"]));
znajdź
$res = mysql_query("SELECT minclassread, minclasswrite, minclasscreate FROM forums WHERE id=$forumid") or sqlerr(__FILE__, __LINE__);
zamień na
$res = mysql_query("SELECT minclassread, minclasswrite, minclasscreate FROM forums WHERE id=".mysql_real_escape_string($forumid)) or sqlerr(__FILE__, __LINE__);
znajdź
$res = mysql_query("SELECT forumid FROM topics WHERE id=$topicid") or sqlerr(__FILE__, __LINE__);
zamień na
$res = mysql_query("SELECT forumid FROM topics WHERE id=".mysql_real_escape_string($topicid)) or sqlerr(__FILE__, __LINE__);
znajdź
$res = mysql_query("SELECT id FROM posts WHERE topicid=$topicid ORDER BY id DESC LIMIT 1") or sqlerr(__FILE__, __LINE__);
zamień na
$res = mysql_query("SELECT id FROM posts WHERE topicid=".mysql_real_escape_string($topicid)." ORDER BY id DESC LIMIT 1") or sqlerr(__FILE__, __LINE__);
znajdź
mysql_query("UPDATE topics SET lastpost=$postid WHERE id=$topicid") or sqlerr(__FILE__, __LINE__);
zamień na
mysql_query("UPDATE topics SET lastpost=$postid WHERE id=".mysql_real_escape_string($topicid)) or sqlerr(__FILE__, __LINE__);
znajdź
$res = mysql_query("SELECT lastpost FROM topics WHERE forumid=$forumid ORDER BY lastpost DESC LIMIT 1") or sqlerr(__FILE__, __LINE__);
zamień na
$res = mysql_query("SELECT lastpost FROM topics WHERE forumid=".mysql_real_escape_string($forumid)." ORDER BY lastpost DESC LIMIT 1") or sqlerr(__FILE__, __LINE__);
znajdź
$res = mysql_query("SELECT name FROM forums WHERE id=$id") or sqlerr(__FILE__, __LINE__);
zamień na
$res = mysql_query("SELECT name FROM forums WHERE id=".mysql_real_escape_string($id)) or sqlerr(__FILE__, __LINE__);
znajdź
$res = mysql_query("SELECT * FROM topics WHERE id=$id") or sqlerr(__FILE__, __LINE__);
zamień na
$res = mysql_query("SELECT * FROM topics WHERE id=".mysql_real_escape_string($id)) or sqlerr(__FILE__, __LINE__);
znajdź
$postres = mysql_query("SELECT * FROM posts WHERE topicid=$id ORDER BY id DESC LIMIT 10") or sqlerr(__FILE__, __LINE__);
zamień na
$postres = mysql_query("SELECT * FROM posts WHERE topicid=".mysql_real_escape_string($id)." ORDER BY id DESC LIMIT 10") or sqlerr(__FILE__, __LINE__);
znajdź
$keywords = trim($_GET["keywords"]);
zamień na
$keywords = htmlspecialchars(trim($_GET["keywords"]));
otwórz plik index.php

znajdź
$res = mysql_query("SELECT * FROM pollanswers WHERE pollid=$pollid && userid=$userid") or sqlerr();
zamień na
$res = mysql_query("SELECT * FROM pollanswers WHERE pollid=".mysql_real_escape_string($pollid)." && userid=".mysql_real_escape_string($userid)) or sqlerr();
znajdź
mysql_query("INSERT INTO pollanswers VALUES(0, $pollid, $userid, $choice)") or sqlerr();
zamień na
mysql_query("INSERT INTO pollanswers VALUES(0, ".mysql_real_escape_string($pollid).", ".mysql_real_escape_string($userid).", ".mysql_real_escape_string($choice).")") or sqlerr(__FILE__, __LINE__);
otwórz plik makepoll.php

znajdź
$question = $_POST["question"];
  $option0 = $_POST["option0"];
  $option1 = $_POST["option1"];
  $option2 = $_POST["option2"];
  $option3 = $_POST["option3"];
  $option4 = $_POST["option4"];
  $option5 = $_POST["option5"];
  $option6 = $_POST["option6"];
  $option7 = $_POST["option7"];
  $option8 = $_POST["option8"];
  $option9 = $_POST["option9"];
  $option10 = $_POST["option10"];
  $option11 = $_POST["option11"];
  $option12 = $_POST["option12"];
  $option13 = $_POST["option13"];
  $option14 = $_POST["option14"];
  $option15 = $_POST["option15"];
  $option16 = $_POST["option16"];
  $option17 = $_POST["option17"];
  $option18 = $_POST["option18"];
  $option19 = $_POST["option19"];
  $sort = (int)$_POST["sort"];

zamień na
$question = htmlspecialchars($_POST["question"]);
$option0 = htmlspecialchars($_POST["option0"]);
$option1 = htmlspecialchars($_POST["option1"]);
$option2 = htmlspecialchars($_POST["option2"]);
$option3 = htmlspecialchars($_POST["option3"]);
$option4 = htmlspecialchars($_POST["option4"]);
$option5 = htmlspecialchars($_POST["option5"]);
$option6 = htmlspecialchars($_POST["option6"]);
$option7 = htmlspecialchars($_POST["option7"]);
$option8 = htmlspecialchars($_POST["option8"]);
$option9 = htmlspecialchars($_POST["option9"]);
$option10 = htmlspecialchars($_POST["option10"]);
$option11 = htmlspecialchars($_POST["option11"]);
$option12 = htmlspecialchars($_POST["option12"]);
$option13 = htmlspecialchars($_POST["option13"]);
$option14 = htmlspecialchars($_POST["option14"]);
$option15 = htmlspecialchars($_POST["option15"]);
$option16 = htmlspecialchars($_POST["option16"]);
$option17 = htmlspecialchars($_POST["option17"]);
$option18 = htmlspecialchars($_POST["option18"]);
$option19 = htmlspecialchars($_POST["option19"]);
$sort = htmlspecialchars($_POST["sort"]);

znajdź
<input type=hidden name=returnto value=<?=$_GET["returnto"]?>>
zamień na
<input type=hidden name=returnto value="<?=htmlentities($_GET["returnto"]) ? htmlentities($_GET["returnto"]) : htmlentities($_SERVER["HTTP_REFERER"])?>">
otwórz plik redir.php

znajdź
print("$url</h2></td></tr></table></body></html>\n");
zamień na
print(htmlspecialchars($url)."</h2></td></tr></table></body></html>\n");
otwórz plik takeupload.php

znajdź
header("Location: $BASEURL/details.php?id=$id&uploaded=1");
zamień na
header("Location: $BASEURL/details.php?id=".htmlspecialchars($id)."&uploaded=1");
otwórz plik userdetails.php

znajdź
$r = @mysql_query("SELECT * FROM users WHERE id=$id") or sqlerr();
zamień na
$r = @mysql_query("SELECT * FROM users WHERE id=".mysql_real_escape_string($id)) or sqlerr();
otwórz plik userhistory.php

znajdź
$action = $_GET["action"];
zamień na
$action = htmlspecialchars($_GET["action"]);
otwórz plik viewsnatches.php

znajdź
list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, $_SERVER["PHP_SELF"] . "?id=" . $_GET[id] . "&" );
zamień na
list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, $_SERVER["PHP_SELF"] . "?id=" . htmlspecialchars($id) . "&" );
znajdź
print("<h1 align=center>Lista userów którzy pobrali torrenta <a href=details.php?id=$_GET[id]><b>$arr3[name]</b></a></h1>\n");
zamień na
print("<h1 align=center>Lista userów którzy pobrali torrenta <a href=details.php?id=".htmlspecialchars($id)."><b>$arr3[name]</b></a></h1>\n");
otwórz plik delacctadmin.php

znajdź
stderr("Skuces", "Konto <b>$username</b> zostało skasowane pomy¶lnie.");
zamień na
stderr("Skuces", "Konto <b>".htmlentities($username)."</b> zostało skasowane pomy¶lnie.");
otwórz plik bans.php

znajdź
mysql_query("DELETE FROM bans WHERE id=$remove") or sqlerr();
zamień na
mysql_query("DELETE FROM bans WHERE id=".mysql_real_escape_string($remove)) or sqlerr();
znajdź
write_log("Ban $remove was removed by $CURUSER[id] ($CURUSER[username])");
zamień na
write_log("Ban ".htmlspecialchars($remove)." was removed by $CURUSER[id] ($CURUSER[username])");
otwórz plik takeedit.php

znajdź
$res = mysql_query("SELECT owner, filename, save_as FROM torrents WHERE id = $id");
zamień na
$res = mysql_query("SELECT owner, filename, save_as FROM torrents WHERE id = ".mysql_real_escape_string($id));
otwórz plik takerate.php

znajdź
$res = mysql_query("SELECT owner FROM torrents WHERE id = $id");
zamień na
$res = mysql_query("SELECT owner FROM torrents WHERE id = ".mysql_real_escape_string($id));
znajdź
$res = mysql_query("INSERT INTO ratings (torrent, user, rating, added) VALUES ($id, " . $CURUSER["id"] . ", $rating, NOW())");
zamień na
$res = mysql_query("INSERT INTO ratings (torrent, user, rating, added) VALUES (".mysql_real_escape_string($id).", " . mysql_real_escape_string($CURUSER["id"]) . ", ".mysql_real_escape_string($rating).", NOW())");
znajdź
mysql_query("UPDATE torrents SET numratings = numratings + 1, ratingsum = ratingsum + $rating WHERE id = $id");
zamień na
mysql_query("UPDATE torrents SET numratings = numratings + 1, ratingsum = ratingsum + ".mysql_real_escape_string($rating)." WHERE id = ".mysql_real_escape_string($id));
otwórz plik staffmess.php

znajdź
<input type=hidden name=returnto value=<?=$_GET["returnto"] ? $_GET["returnto"] : $_SERVER["HTTP_REFERER"]?>>
zamień na
<input type=hidden name=returnto value="<?=htmlentities($_GET["returnto"]) ? htmlentities($_GET["returnto"]) : htmlentities($_SERVER["HTTP_REFERER"])?>">
otwórz plik sendmessage.php

znajdź
<input type=hidden name=returnto value=<?=$_GET["returnto"] ? $_GET["returnto"] : $_SERVER["HTTP_REFERER"]?>>
zamień na
<input type=hidden name=returnto value="<?=htmlentities($_GET["returnto"]) ? htmlentities($_GET["returnto"]) : htmlentities($_SERVER["HTTP_REFERER"])?>">
uff  :doh: nie wiem co mi odwaliło że tyle napisałem, ale mam nadzieję że się komuś przyda, wszystkie te zmiany są w moim tbsource najnowszym jak by ktoś pytał. Dobra teraz mogę leniuchować  :beach:
« Ostatnia zmiana: Styczeń 31, 2007, 01:35:29 wysłana przez nav »
Zapisane

chillo

  • Gość
Odp: Bezpieczny tracker
« Odpowiedź #1 dnia: Styczeń 30, 2007, 12:17:15 »

Ogromne podziekowania za ten opis. :drunk: :salute:

zaraz bede patrzyl co mi sie przyda,  :friends:

wrazie jakis problemów bede pisal.

Zapisane

Kamiloss

  • Super zaawansowany
  • ******
  • Reputacja -65526
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 665
Odp: Bezpieczny tracker
« Odpowiedź #2 dnia: Styczeń 30, 2007, 02:37:39 »

Tak sobie zaczalem patrzec i widze ze tbsource 1.5 ma juz te zabezpieczenia?
Zapisane

Goku

  • Gość
Odp: Bezpieczny tracker
« Odpowiedź #3 dnia: Styczeń 30, 2007, 08:44:18 »

tak wersja finalna TbSource 1.5.0 MrVirago ma już te zabezpieczenia, z resztą jest to napisane na końcu pierwszego posta ;)
« Ostatnia zmiana: Styczeń 30, 2007, 08:54:29 wysłana przez Goku »
Zapisane

~sql

  • Super zaawansowany
  • ******
  • Reputacja 5
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 711
  • Użytkownik jest na liście obserwowanychObserwowany
Odp: Bezpieczny tracker
« Odpowiedź #4 dnia: Styczeń 30, 2007, 03:16:01 »

kawał dobraj roboty  :drunk:
« Ostatnia zmiana: Styczeń 30, 2007, 03:57:39 wysłana przez Zielony »
Zapisane

tuno12

  • Coder
  • Super zaawansowany
  • ******
  • Reputacja 19
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 860
  • Krytyk i Tester
Odp: Bezpieczny tracker
« Odpowiedź #5 dnia: Styczeń 30, 2007, 03:26:36 »

$lsysopnames = array("Sysop", "admin", "mod", "mod2"); // Lista osób ktore sa leganie w zalodze.

yy tu wpisujemy nicki czy rangi jakie mamy? np. SysOp Administrator i Moderator a to mod2 to np. MOD FORUM ? kawał dobrej roboty odwaliłeś :) za to +
Zapisane




Nawet nie próbuj pisać na PW etc.

MrVirago

  • Super zaawansowany
  • ******
  • Reputacja 20
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 584
Odp: Bezpieczny tracker
« Odpowiedź #6 dnia: Styczeń 30, 2007, 03:37:54 »

podajesz nicki

dzięki/////tuno12
« Ostatnia zmiana: Styczeń 30, 2007, 03:43:42 wysłana przez tuno12 »
Zapisane

Red_Devil

  • Slimak...
  • Zaawansowany
  • *****
  • Reputacja 2
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 156
  • Kupa!
Odp: Bezpieczny tracker
« Odpowiedź #7 dnia: Styczeń 31, 2007, 11:58:29 »


utwórz jeszcze plik log.php i wrzuć go również do katalogu /include, nadaj mu chamody na 777

A nie powinno być .txt ?
Zapisane

kamil13151

  • Gość
Odp: Bezpieczny tracker
« Odpowiedź #8 dnia: Styczeń 31, 2007, 12:18:47 »

Powinno byc .txt  :bounce:
Zapisane

xnf

  • Zaawansowany
  • *****
  • Reputacja -4
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 144
  • <? $DL = "SysOp"; ?>
Odp: Bezpieczny tracker
« Odpowiedź #9 dnia: Styczeń 31, 2007, 09:14:48 »

Wielkie Dzięki, niedawno zabezpieczałem sobie makepoll.php i zamieniłem na to:
  $question = htmlentities($_POST["question"]);
  $option0 = htmlentities($_POST["option0"]);
  $option1 = htmlentities($_POST["option1"]);
  $option2 = htmlentities($_POST["option2"]);
  $option3 = htmlentities($_POST["option3"]);
  $option4 = htmlentities($_POST["option4"]);
  $option5 = htmlentities($_POST["option5"]);
  $option6 = htmlentities($_POST["option6"]);
  $option7 = htmlentities($_POST["option7"]);
  $option8 = htmlentities($_POST["option8"]);
  $option9 = htmlentities($_POST["option9"]);
  $option10 = htmlentities($_POST["option10"]);
  $option11 = htmlentities($_POST["option11"]);
  $option12 = htmlentities($_POST["option12"]);
  $option13 = htmlentities($_POST["option13"]);
  $option14 = htmlentities($_POST["option14"]);
  $option15 = htmlentities($_POST["option15"]);
  $option16 = htmlentities($_POST["option16"]);
  $option17 = htmlentities($_POST["option17"]);
  $option18 = htmlentities($_POST["option18"]);
  $option19 = htmlentities($_POST["option19"]);
  $sort = htmlentities($_POST["sort"]);

drugi dobry sposób :P
Zapisane
<?
$site_name = "DL";
$site_owner = "xnf";
$interp = "is";
$rangclass = "SysOp";
$thanks = "Greetings my Friends";
print("$sitename","$rangclass $interp $site_owner");
print("$thanks");
?>

MrVirago

  • Super zaawansowany
  • ******
  • Reputacja 20
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 584
Odp: Bezpieczny tracker
« Odpowiedź #10 dnia: Styczeń 31, 2007, 10:40:24 »

a działają ci PL znaki?? bo mi nie działały
Zapisane

robos85

  • Super zaawansowany
  • ******
  • Reputacja -3
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 386
Odp: Bezpieczny tracker
« Odpowiedź #11 dnia: Styczeń 31, 2007, 11:00:31 »

zamiast htmlentities zpiszcie htmlspecialchars i zadziałają znaki PL :)
Zapisane
Sprzedam domenę. Info: liga-swiatowa.pl <== klik

Red_Devil

  • Slimak...
  • Zaawansowany
  • *****
  • Reputacja 2
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 156
  • Kupa!
Odp: Bezpieczny tracker
« Odpowiedź #12 dnia: Luty 01, 2007, 12:43:13 »

Po zmianach w bittorrent.php gdy edytuje torrenta znika nazwa. Wszystko wgrane tak jak napisane. Sprawdze jeszcze po ktorym dokladnie zabezpieczeniu ale wydaje mi sie ze to
3.
utwórz plik class.inputfilter_clean.php i wrzuć go do katalogu /include
to moze być (tak sie te zebezpieczenie zaczyna)

EDIT
Zgadza sie, po tym zabazpieczeniu znika nazwa torka po edycji
« Ostatnia zmiana: Luty 01, 2007, 12:48:38 wysłana przez Red_Devil »
Zapisane

BitZoorgon

  • Super zaawansowany
  • ******
  • Reputacja -1
  • Offline Offline
  • Wiadomości: 272
Odp: Bezpieczny tracker
« Odpowiedź #13 dnia: Luty 01, 2007, 05:20:27 »

Witam mam jeden problem a mianowicie jak dodam do bittorrent.php
$myFilter = new InputFilter($tags, $attributes, 0, 0); // Invoke it

// works with strings or arrays of strings
$_POST = $myFilter->process($_POST);
$_GET["name"] = $myFilter->process($_GET["name"]);
znikają mi polskie znaki oraz cały status bar. Cuz ktos wie dlaczego???


wiesz co to jest [ code ] ?///tuno12
« Ostatnia zmiana: Luty 04, 2007, 11:20:11 wysłana przez tuno12 »
Zapisane

MrVirago

  • Super zaawansowany
  • ******
  • Reputacja 20
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 584
Odp: Bezpieczny tracker
« Odpowiedź #14 dnia: Luty 01, 2007, 05:24:58 »

lol, nie hmm nie instaluj tego ...Filtra...  on jest trochę zrypany, może uda mi się coś go naprawić, ale teraz są ważniejsze sprawy, np. z wiki
Zapisane

xnf

  • Zaawansowany
  • *****
  • Reputacja -4
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 144
  • <? $DL = "SysOp"; ?>
Odp: Bezpieczny tracker
« Odpowiedź #15 dnia: Luty 02, 2007, 10:25:23 »

u mnie działają PL znaki na htmlentities :]
Zapisane
<?
$site_name = "DL";
$site_owner = "xnf";
$interp = "is";
$rangclass = "SysOp";
$thanks = "Greetings my Friends";
print("$sitename","$rangclass $interp $site_owner");
print("$thanks");
?>

Goku

  • Gość
Odp: Bezpieczny tracker
« Odpowiedź #16 dnia: Luty 02, 2007, 11:03:50 »

3.
utwórz plik class.inputfilter_clean.php i wrzuć go do katalogu /include
to moze być (tak sie te zebezpieczenie zaczyna)

EDIT
Zgadza sie, po tym zabazpieczeniu znika nazwa torka po edycji

dziwne u mnie są te wszystkie zabezpieczenia i nie ma tego problemu
Zapisane

kamil13151

  • Gość
Odp: Bezpieczny tracker
« Odpowiedź #17 dnia: Luty 03, 2007, 03:54:19 »

Bo ja tez tak nie mialem , uzylem moda do resetowania hasla i w recover.php potem bylo not found sorry pal  :P
Zapisane

~sql

  • Super zaawansowany
  • ******
  • Reputacja 5
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 711
  • Użytkownik jest na liście obserwowanychObserwowany
Odp: Bezpieczny tracker
« Odpowiedź #18 dnia: Marzec 19, 2007, 10:45:31 »

Bezpieczny plik docleanup.php

<?

require_once("include/bittorrent.php");

dbconn();
maxsysop ();
loggedinorreturn();
noaccess("docleanup.php", UC_ADMINISTRATOR);
if (get_user_class() < UC_SYSOP) {
die;
  }

docleanup();

print("Done");

?>


W takeprofedit.php znajdz:

$updateset[] = "gg = '$icq'";
I zamień na:

$updateset[] = "gg = ". sqlesc($icq);

Blokada prawego przycisku myszy, w bittorrent.php pomiędzy <head></head> dodaj:

<script>
var isNS = (navigator.appName == "Netscape") ? 1 : 0;
if(navigator.appName == "Netscape") document.captureEvents(Event.MOUSEDOWN||Event.MOUSEUP);
function mischandler(){
return false;
}
function mousehandler(e){
var myevent = (isNS) ? e : event;
var eventbutton = (isNS) ? myevent.which : myevent.button;
if((eventbutton==2)||(eventbutton==3)) return false;
}
document.oncontextmenu = mischandler;
document.onmousedown = mousehandler;
document.onmouseup = mousehandler;
</script>
<!-- right click end -->


:D
« Ostatnia zmiana: Marzec 19, 2007, 11:16:28 wysłana przez Zielony »
Zapisane

Piter

  • Gość
Odp: Bezpieczny tracker
« Odpowiedź #19 dnia: Marzec 19, 2007, 11:19:20 »

lol blokada prawego przycisku, po co to jak masz w menu i tak opcję: "pokaż źródło strony" lol poza tym musiałbyś też dodać to w pliku od SB :P
Zapisane
 

Strona wygenerowana w 0.515 sekund z 23 zapytaniami.