| Zadając pytanie dotyczące PHPNuke podaj jego wersje!! |
| Autor |
Wiadomość |
pmc
~user

Dołączył(a): 1.05.2006
Posty: 9
Status: Offline
|
Wysłany: 16 Paź 2008 17:55:25
|
|
UA: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 |
Witam. Na mojej stronie zbudowanej w oparciu o PHP Nuke 7.7 można dodawać komentarze anonimowo (bez logowania). Jest tak od samego początku czyli od jakichś 2 lat. Oczywiście zdarzają się wpisy bootów, które albo blokuję przez IP, albo usuwam z bazy przez phpmyadmin. Do tej pory były to pojedyncze wpisy.
Od 3 dni nastąpił zmasowany atak na komentarze. Dziennie wpisuje się około 400 - 500 bootów. Czy jest jakiś sensowny sposób na ich zablokowanie ? Dodam, że nie chcę wprowadzać konieczności logowania. Może jest jakiś skrypt, który umożliwia dodanie do komentarzy opcji, która wymusza przepisanie kodu z obrazka ?
Szukałem na tym forum ale niestety nic konkretnego w tym temacie nie znalazłem. Będę wdzięczny za pomoc. W tej chwili musiałem wyłączyć możliwość dodawania komentarzy, bo nie nadążam ich usuwać z bazy.
|
|
|
|
|
|
|
 |
|
|
 |
Jaszczur
~user

Dołączył(a): 21.12.2004
Posty: 1137
Pochwał: 83
Skąd: Racibórz/Katowice
Status: Offline
|
Wysłany: 19 Paź 2008 22:08:47
|
|
UA: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 |
zobacz np. w module your_account jak jest wykorzystywana funkcja gfx (odpowiedzialna za pokazanie się obrazka z liczbami do przepiania) i na podstawie tego możesz napisać coś takiego do komentarzy, mnie się to udało na www.portalliteracki.pl
|
|
|
_________________ Nie udzielam porad via GG,PW, mail etc - o wszystko pytać na forum
www.tobiasz.org | www.phpnuke.com.pl |
|
|
|
 |
pmc
~user

Dołączył(a): 1.05.2006
Posty: 9
Status: Offline
|
Wysłany: 20 Paź 2008 08:10:47
|
|
UA: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 |
Dziękuję za podpowiedź. Niestety nie jestem tak biegły w pisaniu kodu php. Będę bardzo wdzięczny za dokładniejszy opis co i jak mam zrobić. Czy wystarczy przekopiować pewne fragmenty kodu i wkleić do pliku odpowiedzialnego za dodawanie komentarzy ? Jeśli tak to powinienem sobie poradzić po wskazaniu które fragmenty za to odpowiadają. Jeśli mam jednak napisać kod samemu, to raczej nie dam rady.
Apropos, sprawdzałem stronę, którą podałeś, właśnie dokładnie o takie rozwiązanie mi chodzi.
|
|
|
|
|
|
|
 |
Jaszczur
~user

Dołączył(a): 21.12.2004
Posty: 1137
Pochwał: 83
Skąd: Racibórz/Katowice
Status: Offline
|
Wysłany: 21 Paź 2008 08:14:19
|
|
UA: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 |
| pmc napisał(a): |
| wystarczy przekopiować pewne fragmenty kodu |
tak wystarczy
| pmc napisał(a): |
| po wskazaniu które fragmenty za to odpowiadaj |
jesli przyjrzysz się strukturze, modułu Your_Account, to powinieneś dostrzec, które fragmenty za to odpowiadają, wykorzystują one funkcje gfx
|
|
|
_________________ Nie udzielam porad via GG,PW, mail etc - o wszystko pytać na forum
www.tobiasz.org | www.phpnuke.com.pl |
|
|
|
 |
pmc
~user

Dołączył(a): 1.05.2006
Posty: 9
Status: Offline
|
Wysłany: 21 Paź 2008 21:08:04
|
|
UA: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 |
Niestety nie wiem, które to fragmenty. Przeglądałem pliki w Your_Account, zaglądałem do mainfile.php, są tam odwołania do gfx, ale w zbyt wielu miejscach i nie mam pojęcia co dokładnie za co odpowiada. Będę wdzięczny za łopatologiczne wyjaśnienie który kod mam wkleić, w które miejsce, w jakim pliku. Inaczej polegnę. Z góry dzięki wszystkim dobrodziejom
|
|
|
|
|
|
|
 |
briegmannpl
~user

Dołączył(a): 8.10.2008
Posty: 3
Status: Offline
|
Wysłany: 14 Lut 2009 22:15:31
|
|
UA: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 |
Witam
Mam ten sam problem z atakiem botow. Do jednego newsa sa przypisywane ponad 100 komentarzy.
Czy istnieje jakiś sposób na szybkie usuniecie zbędnych komentarzy?
|
|
|
|
|
|
|
 |
Jaszczur
~user

Dołączył(a): 21.12.2004
Posty: 1137
Pochwał: 83
Skąd: Racibórz/Katowice
Status: Offline
|
Wysłany: 14 Lut 2009 23:13:15
|
|
UA: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 |
|
|
|
 |
dudi
@admin

Dołączył(a): 13.12.2004
Posty: 3154
Pochwał: 330
Skąd: Tychy
Status: Offline
|
Wysłany: 18 Lut 2009 11:23:27
|
|
UA: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 |
No i jeszcze aktualizacja tabeli nuke_stories koluman comments, która przechowuje ilość komentarzy do newsa.
A żeby pozbyć się tych robotów trzeba przerobić cały system komentarzy. Jeśli znajdę chwilę to wrzucę gotową modyfikację, która z powodzeniem działa już na kilku większych portalach.
|
|
|
_________________ Pomocy udzielam TYLKO na forum !!! |
|
|
|
 |
wkizet
~user

Dołączył(a): 26.08.2006
Posty: 40
Ostrzeżeń: 1
Status: Offline
|
Wysłany: 18 Sie 2009 18:59:47
|
|
UA: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) |
Kochani, 3 godziny roboty i coś mi nie chce działać.
Zastosowałem zgodnie z zaleceniami Jaszczura funkcje gfx.
Oto co wyszło w comments.php w funkcji reply:
| Kod: |
function reply($pid, $sid, $mode, $order, $thold, $random_num, $gfx_check) {
//include("config.php"); // globalized - Quake
include("header.php");
include("config.php");
global $prefix, $module_name, $user, $cookie, $datetime, $bgcolor1, $bgcolor2, $bgcolor3, $db, $anonpost, $anonymous, $admin;
cookiedecode($user);
getusrinfo($user);
$sid = intval($sid);
$pid = intval($pid);
if (!$stop)
$datekey = date("F j");
$rcode = hexdec(md5($_SERVER['HTTP_USER_AGENT'] . $sitekey . $random_num . $datekey));
$code = substr($rcode, 2, 6);
if (extension_loaded("gd") AND $code != $gfx_check AND ($gfx_chk == 2 OR $gfx_chk == 4 OR $gfx_chk == 5 OR $gfx_chk == 7))
if ($anonpost == 0 AND !is_user($user)) {
OpenTable();
echo "<center><font class=title><b>"._COMMENTREPLY."</b></font></center>";
CloseTable();
echo "<br>";
OpenTable();
echo "<center>"._NOANONCOMMENTS."<br><br>"._GOBACK."</center>";
CloseTable();
} else {
if ($pid != 0) {
$row = $db->sql_fetchrow($db->sql_query("SELECT date, name, email, subject, comment, score FROM ".$prefix."_comments WHERE tid='$pid'"));
$date = $row['date'];
$name = filter($row['name'], "nohtml");
$email = filter($row['email'], "nohtml");
$subject = filter($row['subject'], "nohtml");
$comment = filter($row['comment']);
$score = intval($row['score']);
} else {
$row2 = $db->sql_fetchrow($db->sql_query("SELECT time, title, hometext, bodytext, informant, notes FROM ".$prefix."_stories WHERE sid='$sid'"));
$date = $row2['time'];
$subject = filter($row2['title'], "nohtml");
$temp_comment = filter($row2['hometext']);
$comment2 = filter($row2['bodytext']);
$name = filter($row2['informant'], "nohtml");
$notes = filter($row2['notes']);
}
if(empty($comment)) {
$comment = $temp_comment."<br><br>$comment2";
}
OpenTable();
echo "<center><font class=title><b>"._COMMENTREPLY."</b></font></center>";
CloseTable();
echo "<br>";
OpenTable();
if (empty($name)) $name = $anonymous;
if (empty($subject)) $subject = "["._NOSUBJECT."]";
formatTimestamp($date);
echo "<b>$subject</b> <font class=\"content\">";
if (!empty($temp_comment)) echo"("._SCORE." $score)";
if (!empty($email)) {
echo "<br>"._BY." <a href=\"mailto:$email\">$name</a> <font class=\"content\"><b>($email)</b></font> "._ON." $datetime";
} else {
echo "<br>"._BY." $name "._ON." $datetime";
}
echo "<br><br>$comment<br><br>";
if ($pid == 0) {
if (!empty($notes)) {
echo "<b>"._NOTE."</b> <i>$notes</i><br><br>";
} else {
echo "";
}
}
if (!isset($pid) || !isset($sid)) { echo "Something is not right. This message is just to keep things from messing up down the road"; exit(); }
if ($pid == 0) {
$row3 = $db->sql_fetchrow($db->sql_query("SELECT title FROM ".$prefix."_stories WHERE sid='$sid'"));
$subject = filter($row3['title'], "nohtml");
} else {
$row4 = $db->sql_fetchrow($db->sql_query("SELECT subject FROM ".$prefix."_comments WHERE tid='$pid'"));
$subject = filter($row4['subject'], "nohtml");
}
CloseTable();
echo "<br>";
OpenTable();
mt_srand ((double)microtime()*1000000);
$maxran = 1000000;
$random_num = mt_rand(0, $maxran);
echo "<form action=\"modules.php?name=$module_name&file=comments\" method=\"post\">";
echo "<font class=option><b>"._YOURNAME.":</b></font> ";
if (is_user($user)) {
cookiedecode($user);
echo "<a href=\"modules.php?name=Your_Account\">$cookie[1]</a> <font class=\"content\">[ <a href=\"modules.php?name=Your_Account&op=logout\">"._LOGOUT."</a> ]</font><br><br>";
} else {
echo "<font class=\"content\">$anonymous";
echo " [ <a href=\"modules.php?name=Your_Account\">"._NEWUSER."</a> ]<br><br>";
}
echo "<font class=\"option\"><b>"._SUBJECT.":</b></font><br>";
if (!stripos_clone($subject,"Re:")) $subject = "Re: ".substr($subject,0,81)."";
echo "<input type=\"text\" name=\"subject\" size=\"50\" maxlength=\"85\" value=\"$subject\"><br><br>";
echo "<font class=\"option\"><b>"._UCOMMENT.":</b></font><br>"
."<textarea wrap=\"virtual\" cols=\"70\" rows=\"15\" name=\"comment\"></textarea><br>";
if ($nuke_editor == 0) {
echo "<font class=\"content\">"._ALLOWEDHTML."<br>";
while (list($key,) = each($AllowableHTML)) echo " <".$key.">";
echo "</font><br><br>";
} else {
echo ""._HTMLNOTALLOWED."</font><br><br>";
}
if (is_user($user) AND ($anonpost == 1)) { echo "<input type=\"checkbox\" name=\"xanonpost\"> "._POSTANON."<br>"; }
if (extension_loaded("gd") AND ($gfx_chk == 2 OR $gfx_chk == 4 OR $gfx_chk == 5 OR $gfx_chk == 7)) {
echo "<tr><td colspan='2'>"._SECURITYCODE.": <img src='?gfx=gfx&random_num=$random_num' border='1' alt='"._SECURITYCODE."' title='"._SECURITYCODE."'></td></tr>\n"
."<tr><td colspan='2'>"._TYPESECCODE.": <input type=\"text\" NAME=\"gfx_check\" SIZE=\"7\" MAXLENGTH=\"6\"></td></tr>\n"
."<input type=\"hidden\" name=\"random_num\" value=\"$random_num\">\n";
}
if (!isset($mode) OR empty($mode)) {
if(isset($userinfo['umode'])) {
$mode = $userinfo['umode'];
} else {
$mode = "thread";
}
}
if (!isset($order) OR empty($order)) {
if(isset($userinfo['uorder'])) {
$order = $userinfo['uorder'];
} else {
$order = 0;
}
}
if (!isset($thold) OR empty($thold)) {
if(isset($userinfo['thold'])) {
$thold = $userinfo['thold'];
} else {
$thold = 0;
}
}
echo "<input type=\"hidden\" name=\"pid\" value=\"$pid\">\n"
."<input type=\"hidden\" name=\"sid\" value=\"$sid\">\n"
."<input type=\"hidden\" name=\"mode\" value=\"$mode\">\n"
."<input type=\"hidden\" name=\"order\" value=\"$order\">\n"
."<input type=\"hidden\" name=\"thold\" value=\"$thold\">\n"
."<input type=\"hidden\" name=\"random_num\" value=\"$random_num\">"
."<input type=\"hidden\" name=\"gfx_check\" value=\"$gfx_check\">"
."<input type=\"submit\" name=\"op\" value=\""._PREVIEW."\">\n"
."<input type=\"submit\" name=\"op\" value=\""._OK."\"> "._GOBACK."\n"
."</font></form>\n";
CloseTable();
}
include("footer.php");
} |
Podobnie zrobilem z funkcją replyPreview.
Dołożyłem na końcu
| Kod: |
case "gfx":
gfx($random_num);
break; |
Umieściłem w case replu i preview wpisy $random_num, $gfx_check.
I wszystko ładnie pokazuje się, mam kod zabezpieczający, za każdym razem różny, jednak i tak jeśli wpiszę nieprawidłowy, to komentarz pokazuje się pod newsem.
Czego mi zatem brakuje? Bardzo proszę o jakieś sugestie.
|
|
|
|
|
|
|
 |
wkizet
~user

Dołączył(a): 26.08.2006
Posty: 40
Ostrzeżeń: 1
Status: Offline
|
Wysłany: 23 Sie 2009 08:03:40
|
|
UA: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) |
Może być tak, że kod zabezpieczający będzie ignorowany, ponieważ komentarz wpisuje osoba zarejestrowana i takowa ma priorytet?
|
|
|
|
|
|
|
 |
|
|
|
|
Zobacz następny temat
Zobacz poprzedni temat
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz dołączać plików na tym forum Możesz ściągać pliki na tym forum |
|
|
|
|
|