安全的angularjs代码ajax请求的php文件


Secure angularjs code ajax request on php file

我正在开发web应用程序,我正在使用angularjs。问题是,我希望能够确保我的角代码,我不希望别人看我的代码。

我已经把我的角代码php文件,我正试图通过$.ajax()方法的请求。

你能帮我吗?

这是代码:

index . html文件

<!doctype html>
<html lang="en">
<head>
    ..............
</head>
<body>
    ..............
    <script src="assets/plugins/bootstrap/js/tooltip.js"></script>
    <script src="assets/plugins/bootstrap/js/popover.js"></script>
    <script src="assets/plugins/wow/wow.min.js"></script>
    <script src="assets/plugins/pouchdb/pouchdb-4.0.0.min.js"></script>
    <!-- Sripts for individual pages, depending on what plug-ins are used -->
    <script src="assets/plugins/layerslider/js/greensock.js" type="text/javascript"></script>
    <script src="assets/plugins/layerslider/js/layerslider.transitions.js" type="text/javascript"></script>
    <script src="assets/plugins/layerslider/js/layerslider.kreaturamedia.jquery.js" type="text/javascript"></script>
    <!-- Initializing the slider -->
    <!--Angular scripts-->
    <script src="assets/plugins/angular/angular.min.js"></script>
    <script src="assets/plugins/angular-country-select/angular.country-select.js"></script>
    <script>
        (function(){
            $.ajax({
                url: 'assets/js/an.app.php',
                type:'GET',
                cache: false,
                success: function(newScript){
                    if(newScript){
                        $('body').append(newScript);
                        console.log(newScript);
                    }
                }
            }); 
        })();
    </script>
    <!--Fin Angular-->
    <script>
        jQuery("#layerslider").layerSlider({
            pauseOnHover: true,
            autoPlayVideos: false,
            skinsPath: 'assets/plugins/layerslider/skins/',
            responsive: true,
            skin: 'borderlessdark3d',
            hoverPrevNext: true,
        });
    </script>
    <script>
        new WOW().init();
    </script>
    <!-- Boomerang App JS -->
    <script src="assets/js/wp.app.js"></script>
    <!--[if lt IE 9]>
    <script src="js/html5shiv.js"></script>
    <script src="js/respond.min.js"></script>
    <![endif]-->
</body>
</html>

资产/js/an.php

<?php
$referer = $_SERVER['HTTP_REFERER'];
// Check URL
if ( $referer == 'http://localhost/netskools_website/' || $referer == 'http://localhost/netskools_website/sign-up.html' || $referer == 'http://localhost/netskools_website/index.html') {
?>
<script type="text/javascript">
    (function () {
        'use strict';
        var MyApp = angular.module('MyApp', ['countrySelect']);
        //Directive menu principal de pages
        MyApp.directive('mainmenu', [function () {
            return {
                restrict: 'E',
                templateUrl: 'assets/ngapp/mainmenu.html'
            };
        }]);
        // Directive Template de téléchargement en banière
        MyApp.directive('maindownload', [function () {
            return {
                restrict: 'E',
                templateUrl: 'assets/ngapp/maindownload.html'
            };
        }]);
        // Directive Footer de pages
        MyApp.directive('thefooter', [function () {
            return {
                restrict: 'E',
                templateUrl: 'assets/ngapp/footer.html'
            };
        }]);
        // 
        MyApp.controller('homeController', ['$scope', function ($scope) {
            $scope.activepage = "home";
        }]);
        // 
        MyApp.controller('signupController', ['$scope', '$q', '$filter', function ($scope,$q,$filter) {
            $scope.activepage = "nous-contacter";
            $scope.state_activation = false;
            $scope.nom="";
            $scope.prenom="";
            $scope.email="";
            $scope.type_hote="";
            $scope.selectdefault=0;
            $scope.selectedCountry="";
            $scope.nom_hote="";
            $scope.etat_region="";
            $scope.ville="";
            $scope.adresse="";
            $scope.telephone="";
            $scope.info="";
            $scope.enable_submit = function () {
                if ($scope.subscription === true) {
                    $scope.state_activation = true;
                } else {
                    $scope.state_activation = false;
                }
                return $scope.state_activation;
            };
            //Initialisation de la base données
            var netskoolsSouscriptionsDB, ddoc;
            netskoolsSouscriptionsDB = new PouchDB('http://kristdev:Kokodi.1@localhost:5984/netskools_souscriptions');
            // ====================
            // create a design doc
            ddoc = {
                _id: '_design/indexCollection',
                views: {
                    indexCollection: {
                        map: function mapFun(doc) {
                            if (doc.collection) {
                                emit(doc.collection);
                            }
                        }.toString()
                    }
                }
            };
            // =======================

            // Save Design Doc
            netskoolsSouscriptionsDB
                .put(ddoc)
                .then(function (response) {
                // handle response
                console.log(JSON.stringify(response));
            })
                .catch(function (err) {
                console.log(err);
            });
            /*============================*/
            //Ajout des données du formulaire
            $scope.addData = function() {
                if($scope.nom,$scope.prenom,$scope.prenom,$scope.type_hote,$scope.nom_hote,$scope.selectedCountry,$scope.etat_region,$scope.ville,$scope.adresse,$scope.telephone,$scope.info){
                    var deferred = $q.defer();
                    var value_hote;
                    switch (true){
                        case $scope.type_hote == 0: 
                            value_hote = 'Ecole primaire';
                            break;
                        case $scope.type_hote == 1:
                            value_hote = 'Ecole secondaire';
                            break;
                        case $scope.type_hote == 2:
                            value_hote = 'Ecole supérieure';
                            break;
                        case $scope.type_hote == 3:
                            value_hote = 'Ecole de formation';
                            break;
                        case $scope.type_hote == 4:
                            value_hote = 'Institut de recherche ou de statistique';
                            break;
                        case $scope.type_hote == 5:
                            value_hote = 'Organisme ou organe étatique';
                            break;
                        default: value_hote = 'Autre structure';
                    }
                    var doc = {
                        collection: 'demandeur',
                        nom: $scope.nom,
                        prenom: $scope.prenom,
                        email: $scope.email,
                        type_hote: value_hote,
                        nom_hote: $scope.nom_hote,
                        pays_residence: $scope.selectedCountry,
                        etat_region: $scope.etat_region,
                        ville: $scope.ville,
                        adresse: $scope.adresse,
                        telephone: $scope.telephone,
                        info: $scope.info,
                        activation: false,
                        _id: new Date().toISOString()
                    };    
                    netskoolsSouscriptionsDB
                        .put(doc)
                        .then(function (response) {
                        // handle response
                        console.log('Chaine Ecrite: ' + JSON.stringify(response));
                        document.getElementById('nom').value='';
                        document.getElementById('prenom').value='';
                        document.getElementById('email').value='';
                        document.getElementById('prenom').value='';
                        document.getElementById('nom_hote').value='';
                        document.getElementById('etat_region').value='';
                        document.getElementById('ville').value='';
                        document.getElementById('adresse').value='';
                        document.getElementById('telephone').value='';
                        document.getElementById('info').value='';
                        swal('Demande enregistrée avec succès!', 'Un de nos télé-conseillers vous contactera dans les 48h', 'success');
                        $scope.state_activation = false;
                        deferred.resolve('Ecriture réussie');
                    })
                        .catch(function (err) {
                        console.log(err);
                        deferred.reject('Echec Ecriture');
                    });
                    return deferred.promise;
                }else{
                    ohSnap('Remplissez le formulaire', 'red');
                }
            };
            /*====================================*/
        }]);
    })();
</script>
<?php
}else echo "Vous n'avez pas accès à cette page";
?>

简单地通过ajax加载angular资源(比如控制器或其他模块)是不现实的。一个简单的理解是,应该在文档准备好之前加载所有模块(document.ready)。但是您可以在事件之后通过ajax加载资源。

如果你真的想通过限制HTTP referrers来保护你的代码,你可以添加一个script标签,并链接到php文件。这样的:

<script src="assets/js/an.app.php"></script>

您的php文件不需要更改。但添加标题更好:

// assets/js/an.php
<?php
header('Content-type: application/javascript');
$referer = $_SERVER['HTTP_REFERER'];
// Check URL
if ( $referer == 'http://localhost/netskools_website/' || $referer == 'http://localhost/netskools_website/sign-up.html' || $referer == 'http://localhost/netskools_website/index.html') {
?>
// rest of your code