Avatar billede frustrator Nybegynder
17. februar 2010 - 14:36 Der er 27 kommentarer og
1 løsning

Script giver 403-fejl?

Hey Eksperter

Har netop installeret et rating-script, som dog driller lidt: Det giver den klassiske 403-fejl på serveren:

Forbidden
You don't have permission to access /xxxxxx/script.php on this server.

Jeg er ikke sikker, men jeg kunne godt tro, at det er nogle af disse linjer i script.php, som giver problemet:

include "conf.php";
$link1=getenv(HTTP_HOST);
$link2=$_SERVER["PHP_SELF"];
$link="http://$link1$link2";
$blink=str_replace("script.php","",$link);

Selve script.php filen har chmod 644, mens mappen den ligger i har 755.

Live demo af problemet kan ses her: http://www.ultimative-80ere.dk/site/ratetest2.php

Nogle der har et godt bud på, hvordan problemet løses? Jeg har ikke tidligere haft 403-problemer med mine sider...
Avatar billede preppydude Nybegynder
17. februar 2010 - 17:05 #1
Jeg får en "malware site" advarsel i hovedet. :)
Avatar billede frustrator Nybegynder
17. februar 2010 - 17:17 #2
Der er i hvert fald ingen malware, er en kamp jeg kæmper med Google. Eneste udefrakommende på sitet er netop deres egne annoncer.

Advarslen skyldes misbrug af comment-funktion, som derfor har været disabled længe. Jeg arbejder på nyt site for at forhindre alle disse angreb.

Så ingen hjælp mht. til 403? :o)
Avatar billede kjeldsted Novice
17. februar 2010 - 19:53 #3
Jeg må indrømme mine principper forbyder mig at åbne den slags sider. Et lille citat fra advarslen i min Firefox

"Of the 31 pages we tested on the site over the past 90 days, 27 page(s) resulted in malicious software being downloaded and installed without user consent. The last time Google visited this site was on 2010-02-17, and the last time suspicious content was found on this site was on 2010-02-17."

17/2-2010 blev der sidst fundet mistænkeligt indhold.

Well. Fejlen ligger i linjen $link="http://$link1$link2";. Med minder du har en fil der hedder "$link1$link2". PHP kan ikke skille mellem de to variabler og ved altså ikke der er tale om to variabler. Brug i stedet:

$link='http://'.$link1.$link2;

Så burde det virke.
Avatar billede kjeldsted Novice
17. februar 2010 - 20:00 #4
Hovsa. Jeg tænkte da vist på noget, helt, helt andet. Selvfølgelig burde $link="http://$link1$link2"; da virke. Bare glem hvad jeg skrev om det :)
Avatar billede kjeldsted Novice
17. februar 2010 - 20:01 #5
Er der mulighed for at se lidt mere kode?
Avatar billede kjeldsted Novice
17. februar 2010 - 20:07 #6
Jeg skal beklage al min spam. Men jeg begynder at under mig over din kode. Du hævder at linjerne ligger i en fil kaldet script.php:

$link1=getenv(HTTP_HOST);
$link2=$_SERVER["PHP_SELF"];
$link="http://$link1$link2";
$blink=str_replace("script.php","",$link);

Det vil altså sige at det du gerne vil have ovenstående linjer til er at fortælle dig hvilken sti script.php ligger i eller hvad? For du beder den jo først om at finde http://xxx.xx/xx/script.php for derefter at fjerne script.php. Det forstår jeg ikke helt?
Avatar billede frustrator Nybegynder
17. februar 2010 - 20:07 #7
Først og fremmest ang. malware: Tro mig, jeg har kæmpet med Google i et pænt stykke tid nu og mistet gud-ved-hvor mange brugere på det... og ikke mindst goodwill! Derfor arbejder jeg nu på et større re-design. Tror Google har et problem med mine kontaktformularer - noget tyder på, at det er dér problemet ligger. Domænet er i øvrigt blevet testet af McAfee, der ikke fandt noget :o/

Men anyway, linket til demoen er vel strengt taget heller ikke nødvendigt, da der ikke står noget nyt på siden ud over 403-beskeden.

Og så til det væsentlige... Koden er nu ændret til:

$link='http://'.$link1.$link2;

Og resultatet er det samme - stadig 403.
Avatar billede frustrator Nybegynder
17. februar 2010 - 20:10 #8
Okay, er vist gået glip af nogle posts her... Det er et rating-script, jeg har fundet ude på nettet og altså ikke forfattet selv. Hele script.php ser netop nu således ud:

<?php
foreach($_GET AS $key => $value) {
${$key} = $value;
}
foreach($_POST AS $key => $value) {
${$key} = $value;
}
$ip=getenv(remote_addr);
//$ip=rand(1,10000); //Enable it to disable IP logging
include "conf.php";
$link1=getenv(HTTP_HOST);
$link2=$_SERVER["PHP_SELF"];
$link="http://$link1$link2";
$blink=str_replace("script.php","",$link);
$db=mysql_connect($db_host,$database_user,$database_pass) or die("<b>MySQL Error:</b> Unable to connect to database please check that you have provided the correct <li>Database Login username<li>Database Login Password");    //Connect to database or give error if failed
mysql_select_db($db_name,$db)or die("<b>MySQL Error:</b> Unable to select database please check that you have provided the correct <li>Database name");
$id=str_replace("..","",$id);
$id=str_replace("<","",$id);
$id=str_replace(">","",$id);
$id=str_replace("'","",$id);
$id=str_replace("&","",$id);
$id=str_replace("%","",$id);
$id=str_replace("^","",$id);
$id=str_replace("$","",$id);
$id=str_replace("\\","",$id);
$id=str_replace("/","",$id);
$id=str_replace("(","",$id);

$st=str_replace("..","",$st);
$st=str_replace("<","",$st);
$st=str_replace(">","",$st);
$st=str_replace("'","",$st);
$st=str_replace("&","",$st);
$st=str_replace("%","",$st);
$st=str_replace("^","",$st);
$st=str_replace("$","",$st);
$st=str_replace("\\","",$st);
$st=str_replace("/","",$st);
$st=str_replace("(","",$st);

if($_REQUEST['rate']){
if($_REQUEST['rate']>=1){
$sel=mysql_query("SELECT * FROM rating_ajx WHERE tm='$id'");
if(mysql_num_rows($sel)==1){
$row=@mysql_fetch_array($sel);
if($row[ip]==$ip){
$new_stats=$row[votes];
$new_aveg=$row[rating];
}else{
$new_aveg=(($row[rating]*$row[votes])+$rate)/($row[votes]+1);
$new_stats=$row[votes]+1;
$upd=mysql_query("UPDATE rating_ajx SET ip='$ip',votes='$new_stats',rating='$new_aveg' WHERE tm='$id'");
}
}else{
$new_stats=1;
$new_aveg=$_REQUEST['rate'];
$upd=mysql_query("INSERT INTO rating_ajx SET ip='$ip',votes='$new_stats',rating='$new_aveg',tm='$id'");
}
}else{
$seli=mysql_query("SELECT * FROM rating_ajx WHERE tm='$id'");
$bow=@mysql_fetch_array($seli);
$new_stats=$bow[votes];
$new_aveg=$bow[rating];
}
$new_aveg=round($new_aveg,2);
if($new_stats>1){
$spell="votes";
}else{
$spell="vote";
}
echo "<FONT SIZE=1><B>Average: $new_aveg ($new_stats $spell)</B></FONT>";
}else{
echo "var xmlhttp;";
echo "
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
} else if(window.ActiveXObject) {
xmlhttp = new ActiveXObject(\"Microsoft.XMLHTTP\");
}
var shows = 0;
var rid;
var lc;
";
echo "function load(rate,rid){
lc=rid;
var qs = '".$blink."script.php?id='+rid+'&rate='+rate;
xmlhttp.open(\"POST\", qs);
xmlhttp.onreadystatechange = handleResponse;
xmlhttp.send(null);
}
function notext (raid)
{
var cy;
var poy;
cy =  'imgst'+raid;
poy = document.getElementById(cy);
poy.innerHTML='';
}
function show(star_img,rnid,style)
{
if (shows){
if(rnid==lc){
return;
}
};
var i;
var image;
var ny;
var cy;
var poy;
cy =  'imgst'+rnid;
poy = document.getElementById(cy);
for (i=1; i<=star_img; i++) {
image =  'qw'+rnid + i;
ny = document.getElementById(image);
ny.src=\"".$blink."style/\"+style+\"/over.gif\";
if(i=='1'){
poy.innerHTML='Poor';
}
else if(i=='2'){
poy.innerHTML='Fair';
}
else if(i=='3'){
poy.innerHTML='Good';
}
else if(i=='4'){
poy.innerHTML='Very Good';
}
else if(i=='5'){
poy.innerHTML='Excellent';
}
}
}
function noshow(star_img,rnid,style)
{
    if (shows){
            if(rnid==lc){
        return;
            }
            };
    var i;
    var image;
    var ny;
    for (i=1; i<=5; i++) {
    image = 'qw'+rnid + i;
    ny = document.getElementById(image);
    ny.src=\"".$blink."style/\"+style+\"/out.gif\";
    }
    for (i=1; i<=star_img; i++) {
        image = 'qw'+rnid + i;
        ny = document.getElementById(image);
        ny.src=\"".$blink."style/\"+style+\"/out.gif\";
    }
    //check(rnid,style);
}";

echo "function check(doc,rnid,style){";
echo "for (var i=1; i<=5; i++) {";
echo "var image; var ny;";
echo "image = 'qw'+rnid + i;";
echo "ny = document.getElementById(image);";
echo "if(i<=doc){";
echo "ny.src=\"".$blink."style/\"+style+\"/over.gif\";";
echo "}else{";
echo "ny.src=\"".$blink."style/\"+style+\"/out.gif\";";
echo "}";
echo "} }";

echo "function mark(star_img,rid,style)
{
    if (shows){
    if(rid==lc){
    return;
    }
    };
    show(star_img,rid,style);
    shows = 1;
    lc=rid;
    //var n = document.getElementById('n'+rid);
    //n.innerHTML = \"Thank you for rating\";
    var qs = '".$blink."script.php?rate=' + star_img + '&id='+rid+'&st='+style;
    xmlhttp.open(\"POST\", qs);
    xmlhttp.onreadystatechange = handleResponse1;
    xmlhttp.send(null);
}
function handleResponse() {
  if(xmlhttp.readyState == 4){
    var response = xmlhttp.responseText;
    document.getElementById(lc).innerHTML = response;
  }";
echo "}";

echo "function handleResponse1() {
  if(xmlhttp.readyState == 4){
    var response = xmlhttp.responseText;
    document.getElementById(lc).innerHTML = response;
  }";
echo "}";
echo "
function showform(raid,style){";
$sekl=mysql_query("SELECT * FROM rating_ajx WHERE tm='$id'");
if(@mysql_num_rows($sekl)==1){
$riw=@mysql_fetch_array($sekl);
}
if($riw[rating]==""){
$riw[rating]=0;
}
echo "var doc=\"$riw[rating]\";";
echo "document.write(\"<Table width=180 border=0 cellpadding=0 cellspacing=0><TR><TD width=180 colspan=2 style='FONT-FAMILY: Verdana, Arial;font-size:12px;'><span id=n\"+raid+\"></span></TD></TR><TR><TD width=115 style='padding:0px;'><span id=povc>\");
var i;
for (i=1; i<=5; i++) {";
echo "if(i<=doc){";
echo "document.write(\"<img src='".$blink."/style/\"+style+\"/over.gif' id=qw\"+raid+i+\"  onmouseover='noshow(\"+i+\",\"+raid+\",\"+style+\");show(\"+i+\",\"+raid+\",\"+style+\")' onmouseout='noshow(\"+i+\",\"+raid+\",\"+style+\");notext(\"+raid+\");check(\"+doc+\",\"+raid+\",\"+style+\");' onclick='mark(\"+i+\",\"+raid+\",\"+style+\")'>\");";
echo "}else{";
echo "document.write(\"<img src='".$blink."style/\"+style+\"/out.gif' id=qw\"+raid+i+\"  onmouseover='noshow(\"+i+\",\"+raid+\",\"+style+\");show(\"+i+\",\"+raid+\",\"+style+\")' onmouseout='noshow(\"+i+\",\"+raid+\",\"+style+\");notext(\"+raid+\");check(\"+doc+\",\"+raid+\",\"+style+\");' onclick='mark(\"+i+\",\"+raid+\",\"+style+\")'>\");";
echo "}";
echo "
}
document.write(\"</span></TD><td width=65 align=left style='font-size:10px;padding-left:2px;FONT-FAMILY: Verdana, Arial;'><span id=imgst\"+raid+\"></span></TD></TR><TR><TD colspan=2 style='FONT-FAMILY: Verdana, Arial;'><span id=\"+raid+\"></span></TD></TR></Table>\");
}
";
}
?>

Var der nogen, der blev klogere af det?
Avatar billede kjeldsted Novice
17. februar 2010 - 20:24 #9
Sorry. Må desværre nok melde pas. Har aldrig før set en lave et javascript på en sådan måde.
Avatar billede frustrator Nybegynder
17. februar 2010 - 20:28 #10
Damn.... havde ellers lige håbet på en lille genistreg ;o)

Anybody else? Please?
Avatar billede kjeldsted Novice
17. februar 2010 - 20:32 #11
Og alligevel bliver man så nysgerrig at man absolut bare vil finde fejlen ;) Så jeg vovede mig ind på siden og satstede på at min Mac ikke ville begynde at downloade de filer Google advarer imod. Og siden virker uden problemer for mig.
Avatar billede frustrator Nybegynder
17. februar 2010 - 20:41 #12
Hmmm, mystisk... for når jeg forsøger at afgive en rating, så får jeg stadig en 403-fejl - og der kommer ingen data i tabellen i databasen. Har du forsøgt at rate?
Avatar billede kjeldsted Novice
17. februar 2010 - 20:45 #13
Øh. Det er jo  ikke fordi der er de stor muligheder for at foretage handlinger på en side der kun indeholder tekst?
Avatar billede frustrator Nybegynder
17. februar 2010 - 20:51 #14
Du kan vel se selve stjerner til rate-funktionen, ikke? Selve indholdet på siden er uden betydning, det er selve funktionen, der skal testes
Avatar billede kjeldsted Novice
17. februar 2010 - 20:53 #15
Der står ikke andet end:

"
OVERSKRIFT



Og her er teksten der skal rates....

xxxxxxxxxxxxxxxxxxxx

yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

kryds fingre,....
"
Avatar billede frustrator Nybegynder
17. februar 2010 - 20:55 #16
Weird.... for jeg har da selve rate-funktionen med stjerner og dem ganzen molevitten... Har du prøvet at opdatere siden?
Avatar billede frustrator Nybegynder
17. februar 2010 - 20:55 #17
Selve rate-funktionen er placeret mellem rækkerne af x'er og y'er
Avatar billede kjeldsted Novice
17. februar 2010 - 20:57 #18
Ah, nu ved jeg hvorfor.

Lige et spørgsmål. Har du nogensinde hørt om udtrykket "browservenlighed"?
Avatar billede kjeldsted Novice
17. februar 2010 - 21:24 #19
Well. Jeg kender vel selv svaret. Det er noget du bliver nødt til at tage meget seriøst. Medmindre du gerne vil miste brugere.
Blot på din forside (http://www.ultimative-80ere.dk/) har du 994 fejl og 42 advarsler (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.ultimative-80ere.dk%2F&charset=%28detect+automatically%29&doctype=Inline&group=0 )).

Hvis ikke du gør noget ved problemet er din side ikke meget værd. Grunden til jeg ikke kan se den der rating ting er formodentlig at man enten ikke kan se den i Firefox eller på Mac. Og tro mig. Der findes faktisk rent mange Firefox samt Mac brugere.
Avatar billede frustrator Nybegynder
17. februar 2010 - 21:58 #20
Glem alt om browservenlighed på resten af sitet, da det alligevel er fucked op lige for tiden - derfor også et re-design. Dette nye rating-script har jeg endnu kun testet i IE, så ja - det kunne være forklaringen.
Avatar billede kjeldsted Novice
17. februar 2010 - 22:03 #21
Men blot på den side er der 8 fejl. Men er ikke i stand til at hjælpe når ikke jeg kan se hvad det er der sker. Hvis de der stjerne, eller hvad det nu er, vises med JavaScript tag et kig på (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.ultimative-80ere.dk%2Fsite%2Fratetest2.php&charset=%28detect+automatically%29&doctype=Inline&group=0&user-agent=W3C_Validator%2F1.654 ) og ret fejlene. Vil evt. hjælpe.
Avatar billede frustrator Nybegynder
18. februar 2010 - 09:43 #22
Well, jeg kan også se stjerne og benytte rate-funktionen i Firefox, selvom 403-fejlen stadig opstår - sikker på at det ikke er hos dig, der er en smutter?

Hvad angår fejl på siden, så tror jeg stadig det er en lille biting lige nu - det er rettet på ratetest2.php, men er du klar over hvor mange anerkendte sites, der har oceaner af fejl ifølge W3-validatoren?

tv2.dk - 78 fejl
dr.dk - 50 fejl
bt.dk - 22 fejl
dsb.dk - 27 fejl

og ikke mindst:

eksperten.dk - 101 fejl !!!

Så lad os ikke hænge os for meget i dem lige nu, jeg er mere interesseret i at få løst 403-problemet.
Avatar billede kjeldsted Novice
18. februar 2010 - 21:55 #23
Så er det måske på grund af Google.

Og mht. Validering. Så lad mig lige kommentere at TV2, DR, BT, DSB samt Eksperten alle er i stand til at programmere hjemmesider som ikke overholder standarden, men dog stadig bliver vist optimalt i IE, FF, Safari, Opera, Crome m.m. Men nu er du jo tydeligvis ikke selv i stand til det. Så hvorfor ikke holde sig til standarden så  FF, Safari, Opera og Crome (Desværre kan IE ikke puttes i denne kategori, men det er fordi Microsoft har deres egne standarder) viser siden på samme måde? Tro mig, jeg gør det selv, og jeg er bestemt ikke den første der henviser til W3's standarder hér på Eksperten.

Hvor har du taget JavaScript filen henne? For går ikke ud fra det er noget du selv har lavet.
Avatar billede frustrator Nybegynder
19. februar 2010 - 09:28 #24
Ja ja, godt ord igen... nu startede det egentlig bare med at jeg spurgte efter lidt hjælp til rating-scriptet, og diskussionen endte et helt andet sted. Men lad det nu ligge.

Hele scriptet er hente som pakke herfra:

http://www.scriptsez.net/?action=details&cat=Reviews and Ratings&id=2529675179
Avatar billede kjeldsted Novice
19. februar 2010 - 09:53 #25
Eftersom du har betalt 55 kroner for systemet er sted hvor de tilbyder 24/7 support, har du så ikke overvejet at spørge dér?

Jeg må nok indrømme jeg synes det er svært at fejlfinde på det her system, når man ikke rigtig kan se hvad der bliver udskrevet hvor. Havde håbet det kunne hjælpe at læse lidt der hvor scriptet er taget fra. Men har nu ikke i sinde at købe det.

Men hvorfor ikke bare selv lave et PHP script. Hjemmelavede ting er lettere at arbejde med.
Avatar billede frustrator Nybegynder
19. februar 2010 - 12:31 #26
Tjah, det er så noget at overveje til næste gang
Avatar billede kjeldsted Novice
19. februar 2010 - 12:53 #27
Jeg mente nu ikke til næste gang. Og kan se du har programmeret PHP de sidste 8 år. Så taget i betragtning du har 4 års erfaring mere end mig, burde det ikke være noget problem ;)

Men ellers er mit forslag at du kontakter det firma du har købt scriptet hos.
Avatar billede frustrator Nybegynder
24. februar 2010 - 12:19 #28
Lukker...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester