[PHP] SJS - Sicherung von Scripten

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Smokers, 13. Oktober 2008 .

Schlagworte:
  1. 13. Oktober 2008
    SJS - Sicherung von Scripten

    Wer wünscht es sich nicht... ?

    Stundenlang an einer JavaScript Datei oder einer Klasse gefummelt und dann kommt ein Kiddie und klaut den Style oder das Script.

    Das ist nun nicht mehr, oder schwerer möglich.

    Hier nun meine Klasse "SJS".

    PHP:
    <? php
    class  SJS  {

        

        
    private  $sOriginFile  = '' ;
        

        
    private  $sOriginFileContent  = '' ;
        

        
    private  $sSecuredFile = '' ;
        

        
    private  $sSecureDir  'SJS' ;
        

        
    private  $sFileType  '' ;
        

        
    private  $sRequestToken  = 0 ;
        

        
    public      $sErrorMessage  "Diese Datei ist Urheberrecthlich geschützt und darf nicht verwendet werden.\nSprich : Finger weg!!!\n \n \n \nCopyrights by Smokers  in association with Murdoc." ;
        
        public function 
    __construct ( $sOriginFile ) {
            
    $this -> sOriginFile  $sOriginFile ;
            
    $this -> CreateDir ();
            if(!
    file_exists ( $this -> sOriginFile )) {
                echo 
    'Angegebene Datei nicht vorhanden.' ;
                exit();
            }
            
    session_start ();
            
    $this -> sRequestToken  md5 ( rand ( 0 1000 ) .  $_SERVER [ 'REQUEST_TIME' ]);
            
    $this -> DetectFileType ();
            
        }
        
        

        
    private function  DetectFileType () {
            if(
    preg_match ( '~\.css$~' , basename ( $this -> sOriginFile ))) {
                
    $this -> sFileType  'css' ;
            }
            if(
    preg_match ( '~\.js$~' , basename ( $this -> sOriginFile ))) {
                
    $this -> sFileType  'js' ;
            }
        }
        
        

        
    private function  CreateDir () {
            if(!
    is_dir ( $this -> sSecureDir )) {
                
    mkdir ( $this -> sSecureDir , 4777 );
            }
        }
        
        

        
    private function  dequote ( $str ) { 
            return 
    preg_replace ( '~^(["\']*)(.*)\1$~' '$2' $str );
        }
        
        

        
    private function  RedesidnPath () {
            
    $path  dirname ( $this -> sOriginFile );
            if(
    substr ( $path , - 1 ) !=  DIRECTORY_SEPARATOR $path  .=  DIRECTORY_SEPARATOR ;
            
    $path  str_replace ( '\\' '/' $path );
            
            
    $this -> sOriginFileContent  preg_replace ( '~url\((["\']{0,1})(.*)\1\)~Ue' '"url(\'.'  $path  '" . $this->dequote(stripslashes(\'\\2\')) . "\')"' $this -> sOriginFileContent );
        }
        
        

        
    private function  CreateNewFile () {
            
    $handle  fopen  ( $this -> sOriginFile "rb" );
            while (!
    feof ( $handle )) {
                
    $buffer  fgets ( $handle 4096 );
                
    $this -> sOriginFileContent .=  $buffer ;
            }
            
    fclose ( $handle );
            
            
            
    $this -> sSecuredFile  basename ( $this -> sOriginFile ). '.php' ;
            
    $handle  fopen ( $this -> sSecureDir . '/' . basename ( $this -> sSecuredFile ), 'w+' );
            if(
    $this -> sFileType  ==  "css" ) {   
                
    $this -> RedesidnPath ();
                
    $code 
    <<<CONTENT
    <?php
        session_start(); //nicht heterot =) 
        header('Content-type: text/css');

        if(!(isset(\$_GET['SJSToken']) && isset(\$_SESSION['SJS_TOKEN_
    { $this -> sOriginFile } '])
        && \$_GET['SJSToken'] == \$_SESSION['SJS_TOKEN_
    { $this -> sOriginFile } ']))
            exit('
    { $this -> sErrorMessage } ');
        unset(\$_SESSION['SJS_TOKEN_
    { $this -> sOriginFile } ']);
    ?>    
    { $this -> sOriginFileContent }
    CONTENT;
            }
            if(
    $this -> sFileType  ==  "js" ) { 
                
    $code 
    <<<CONTENT
    <?php
        session_start();
        header('Content-type: application/javascript'); // wird atm nur gelöscht wenn der code richtig war - unser if hat keine klammern,ahhhh brainckk :D

        if(!(isset(\$_GET['SJSToken']) && isset(\$_SESSION['SJS_TOKEN_
    { $this -> sOriginFile } '])
        && \$_GET['SJSToken'] == \$_SESSION['SJS_TOKEN_
    { $this -> sOriginFile } ']))
            exit('
    { $this -> sErrorMessage } ');
        unset(\$_SESSION['SJS_TOKEN_
    { $this -> sOriginFile } ']);
    ?>    
    { $this -> sOriginFileContent }
    CONTENT;
            }
            
            
    fwrite ( $handle , $code );

        }
        
        

        
    public function  Assign () {
            if(
    $this -> sFileType  ==  'css' ) {
                
    $this -> AssignCSS ();
            } 
            if(
    $this -> sFileType  ==  'js' ) {
                
    $this -> AssignJS ();
            }
                
        }
        
        

        
    private function  AssignJS () {
            (int) 
    $iFileTimeOrigin  = @ filemtime ( $this -> sOriginFile ) ;
            (int) 
    $iFileTimeNew   = @ filemtime ( $this -> sSecureDir . '/' . basename ( $this -> sOriginFile ). '.php' ) ;

            if(!
    file_exists ( $this -> sSecureDir . '/' . basename ( $this -> sOriginFile ). '.php' ) ||  $iFileTimeOrigin  $iFileTimeNew  ){
                
    $this -> CreateNewFile ();
                echo 
    '<script type="text/javascript" src="' . $this -> sSecureDir . '/' . $this -> sSecuredFile . '?SJSToken=' . $this -> sRequestToken  . '"></script>' ;
            } 
            else {
                echo 
    '<script type="text/javascript" src="' . $this -> sSecureDir . '/' . basename ( $this -> sOriginFile ). '.php?SJSToken=' . $this -> sRequestToken . '"></script>' ;
            }
        }
        

        
    private function  AssignCSS () {
            (int) 
    $iFileTimeOrigin  = @ filemtime ( $this -> sOriginFile ) ;
            (int) 
    $iFileTimeNew   = @ filemtime ( $this -> sSecureDir . '/' . basename ( $this -> sOriginFile ). '.php' ) ;
            
            
            
            if(!
    file_exists ( $this -> sSecureDir . '/' . basename ( $this -> sOriginFile ). '.php' ) ||  $iFileTimeOrigin  $iFileTimeNew  ){
                
    $this -> CreateNewFile ();
                echo 
    '<link rel="stylesheet" type="text/css" href="' . $this -> sSecureDir . '/' . $this -> sSecuredFile . '?SJSToken=' . $this -> sRequestToken  . '" />' ;
            } 
            else {
                echo 
    '<link rel="stylesheet" type="text/css" href="' . $this -> sSecureDir . '/' . basename ( $this -> sOriginFile ). '.php?SJSToken=' . $this -> sRequestToken . '" />' ;
            }
        }
        
        public function 
    __destruct () {
            
    $_SESSION [ 'SJS_TOKEN_' . $this -> sOriginFile ] =  $this -> sRequestToken ;
        }
    }


    ?>

    Der Aufuf erfolgt über :

    PHP:
    <? php
    require_once( 'class.SJS.php' );

    $sjs  = new  SJS ( 'test.js' );
    $sjs -> Assign ();  // gibt den Link aus

    ?>

    <input type="button" onclick="hello_world();" value="1" />
    Ich bin PHP immernoch im Anfängerstatus, ich bitte das zu berücksichtigen.
    Für Feature-Wünsche,Verbesserungen, Fehler bin ich gern offen =)


    Smokers
     
  2. 13. Oktober 2008
    AW: SJS - Sicherung von Scripten

    Netter Ansatz, allerdings einfacher mit auto_prepend_file zu realisieren.
     
  3. 13. Oktober 2008
    AW: SJS - Sicherung von Scripten

    Mhh kann sein, jedoch erlauben das auch nicht alle Hoster.
    Wie gesagt , bin PHP Anfänger und hatte mal ne Idee und hab nichts passendes
    fertiges gefunden =)
     
  4. 13. Oktober 2008
    AW: SJS - Sicherung von Scripten

    also ich finds ja schon etwas aufwendig
    einmal about:cache in die adresszeile und schon hab ich den code auch....
    aber nette idee ^^ als erste schutzmaßnahme möglich
     
  5. 13. Oktober 2008
    AW: SJS - Sicherung von Scripten

    Will Dir ja nicht dein Spaß verderben, aber was hindert mich daran die Datei mittels Firebug auszulesen?
     
  6. 13. Oktober 2008
    AW: SJS - Sicherung von Scripten

    Ich sagte doch ganz oben das es kein 100%tiger Schutz ist.


    Es ist lediglich ein erschweren des Klaus.

    Ich könnte auch noch einen Obfuscator mit rein bringen für JS ... und alles son kram.
    Ein 100%tiger Schutz wäre es trotzdem nicht.

    Aber es ist schonmal sicherer als NUR einen Obfuscator oder es gänzlich ohne zu machen.

    Nun ist schonmal wenigstens das : "Seitenquelltext anzeigen" + STRG+C + STRG+v nicht mehr so einfach oder verhindert.
     
  7. 14. Oktober 2008
    AW: SJS - Sicherung von Scripten

    vielen dank. Aber so wehrt man wenigstens ca 80% der Scriptklauer ab. Die restlichen haben es dann verdient ^^
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.