PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

crowd42 : Configurer firefox et chromium pour utiliser Tor avec l'addon FoxyProxy

jeudi 31 octobre 2013 à 17:08

TorDepuis que cette dernière vague de censure à frapper le Web marocain, j'ai remarqué que plusieurs internautes marocains refusaient ou hésiter à utiliser Tor Browser Bundle. Pourtant le moyen le plus simple, sécurisé et rapide pour accéder aux sites bloqués par le makhzen (dont ce blog :/).

D'après ce que j'ai pu comprendre, c'est soit parce qu'ils sont des utilisateurs de chromium (google chrome) et ils ne veulent en aucun cas utiliser Firefox, soit ils avaient lu (et surtout mal compris) les récentes informations sur le démantèlement des réseaux pédophiles et le site Silk Road, l'ebay de la drogue, qui sévissaient sur le réseau Tor.

Dans les deux affaires, ce n'était pas dû à une faille liée à Tor. Dans le premier cas, le FBI avait exploité une faille dans les anciennes versions de Firefox et dans le deuxième cas, l'admin de Silk Road a commis par le passé quelques bourdes en dévoilant sur la plateforme Stackoverflow des informations qui ont permis son arrestation.

Mais si vous tenez vraiment à utilisez la version de firefox déjà installé sur votre ordinateur, ou Google chrome ou tout autre navigateur qui supporte la gestion des proxy, qu'à cela ne tienne. Voilà une astuce qui va vous permettre de naviguer sur le web en passant par le réseau Tor.

Si vous utilisez Firefox ou Chromium (version libre e google chrome), je vous recommande d'installer l'addon FoxyProxy, un outil qui permet la gestion à la volée des proxies. Il est disponible ici pour firefox et ici pour chromium.

Pour installer GNU/Linux sur une distribution GNU/Linux, il suffit d'aller le chercher dans les dépôts officiels. Par exemple pour une Debian ou Ubuntu :

apt-get install tor

Pour les malheureux utilisateurs de windows, téléchargez Expert Bundle sur cette page et installez l'exécutable comme vous le faites avec n'importe quel autre logiciel.

Maintenant que nous avons installé Tor et FoxyProxy, nous allons ajouter notre proxy Tor. Pour ça, cliquez sur le petit renard bleu et ensuite sur "Ajouter un nouveau proxy". Sur firefox ça donne ça :

FoxyProxy

Dans le premier onglet, indiquez un nom pour le proxy, tor par exemple puis cliquez sur le deuxième onglet :

FoxyProxy

Cochez les cases comme indiqué dans la capture et saisissez l'adresse ip 127.0.0.1 (localhost) sur le port 9050. Le dernier onglet nous n'intéresse pas beaucoup, donc vous allez l'ignorer. Sauvegardez et fermer FoxyProxy.

À présent, vous devez normalement voir apparaître -en faisant un clic droit sur l'icône du renard- une nouvelle entrée dans le menu "utiliser le proxy Tor pour toutes les url". Après avoir coché cette option, on va visiter cette page pour vérifier que notre trafic web passe bel et bien via Tor :


Check tor

Bien évidemment, on pouvait utiliser la fonctionnalité native de gestion de proxy de firefox et chromium, mais foxyproxy est plus pratique surtout si on utilise plusieurs proxy.

Notez aussi qu'il existe une autre façon de procéder, moins élégante que celle-ci, mais qui a l'avantage de faire passer toutes les données transmises par n'importe quelle application par le réseau Tor. Il suffit juste d'exécuter la ligne de commande suivante :

torify application &

Voilà, c'est simple non ! ET n'oubliez pas de lancer des relais Tor à votre tour, c'est très important ;)

tag:

Gravatar de crowd42
Original post of crowd42.Votez pour ce billet sur Planet Libre.

Maxime CHAILLOU : Contrôle d’accès simple avec CodeIgniter

jeudi 31 octobre 2013 à 16:59

Une des choses redondantes dans un projet, c’est le contrôle d’accès. Savoir jusqu’où un utilisateur non connecté peut aller, ou même limiter les droits de certains utilisateurs.
Le truc basique c’est de checker soit dans le constructeur du contrôleur, soit dans chaque fonction du contrôleur si l’utilisateur a les droits suffisants pour continuer. Or lorsque le projet atteint une certaine ampleur, il devient vite contraignant et lourd de rajouter ce contrôle à chaque fonction.

Étendre la classe controller

Au début, je pensais créer un hook pre-controller mais toutes les fonctionnalités dont j’avais besoin n’étaient pas chargées. Du coup j’étends la classe controller afin que chaque contrôleur commence par checker l’accès avant d’aller plus loin.

Pour étendre la classe controller il faut créer un fichier /application/core/MY_Controller.php


Préparer les liens accessibles sans connexion

Ici je définis tous les liens ( controleur/fonction ) qui peuvent être accessibles sans connexion. Pour moi c’est plus simple dans ce sens, il est possible de faire l’inverse s’il y a plus d’endroits accessibles sans connexion qu’avec connexion.


Je créé donc un tableau avec les fonctions qui n’ont pas besoin de contrôle d’accès. C’est utile de mettre les fonctions car on peut très bien imaginer une fonction profil dans le contrôleur user, qui aurait besoin d’un contrôle d’accès.

Mise en place du contrôle d’accès


    protected $_no_access_control = array (
        'utilisateur/nouveau',
        'utilisateur/connexion'
    );

    public function __construct() {
        parent::__construct();
 
        $this->_check_auth();
    }
 
    // Vérifie les authorisations
    private function _check_auth() {
        // Construction de l'uri
        $uri = $uri = $this->router->fetch_class() . '/' . $this->router->fetch_method();
 
        // Si la personne n'est pas connecté et qu'elle veut aller sur un lien non autorisé
        if ( ! $this->session->userdata('login') && ! in_array($uri, $this->_no_access_control) ){
            $this->_kick();
        }
    }
 
    // Redirige les requetes non authorisées
    private function _kick() {
        if ( $this->input->is_ajax_request() ) {
            $response = array('status' => 'disconnected');
            echo (json_encode($response));
            die();
        }
        else {
            redirect('accueil');
        }
    }
}

Voila tout est fait.

Explications:

A chaque chargement du contrôleur, on construit l’URI pour n’avoir que le contrôleur et sa fonction. On vérifie à partir de la session si la personne est connectée et si l’url qu’elle demande lui est autorisée. Avec cet exemple simple, un utilisateur non connecté peut accéder qu’aux liens présents dans le tableau. Pour tous les autres il doit être connecté. Lorsque l’utilisateur n’est pas accepté, il est redirigé directement vers l’accueil.

Maintenant c’est bien beau, mais il va falloir modifier chaque contrôleur afin de les étendre à partir de notre nouveau contrôleur de base.

class Utilisateur extends MY_Controller {

}

Conseil d’utilisation de ce système:

Si vous n’avez pas du tout besoin du contrôle d’accès dans votre contrôleur, vous créez votre contrôleur normalement ( extends CI_Controller ).

Si au moins une fonction de votre contrôleur a besoin du contrôle d’accès alors vous créez à partir de votre contrôleur étendu ( extends MY_Controller ).

Gravatar de Maxime CHAILLOU
Original post of Maxime CHAILLOU.Votez pour ce billet sur Planet Libre.

Morot : Permettre l’exécution forcée de check dans Nagios

jeudi 31 octobre 2013 à 12:03

Trop souvent (Debian/Ubuntu!) je tombe sur cette erreur dans un Nagios :


Error: Could not stat() command file ‘/var/lib/nagios3/rw/nagios.cmd’!

The external command file may be missing, Nagios may not be running, and/or Nagios may not be checking external commands. An error occurred while attempting to commit your command for processing.

La solution est pourtant simple, il suffit pourtant dans le fichier /etc/nagios/nagios.cfg de passer à 1 la valeur de la directive check_external_commands puis d’exécuter :


dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
service nagios3 restart

Gravatar de Morot
Original post of Morot.Votez pour ce billet sur Planet Libre.

dada : ownCloud Documents, le test

jeudi 31 octobre 2013 à 11:30

owncloud-logo.png

Dans un précédent billet, je parlais de l'ajout de l'application Documents à solution d'informatique dans les nuages ownCloud. Je n'avais pas réussi à la tester mais c'est maintenant chose faite.

Je vous propose de regarder ce qu'il se cache derrière Documents.

Ma configuration de test se résume à mon PC portable sous Debian Wheezy/Testing, apache2, Firefox et du Pink Floyd. Le tout en local. J'ai commencé avec la première version beta et j'ai terminé avec la deuxième. Il peut donc y avoir des petites différences entre certaines captures d'écran, rien de bien méchant dans l’ensemble.

Une nouvelle application

Qui dit nouvelle application dans votre instance ownCloud dit nouvelle icône. Documents va logiquement se glisser dans la barre d'outils latérale. Un simple clique et vous êtes à la maison.

index.png

Documents va naturellement chercher les fichiers compatibles dans les répertoires que contient votre instance. Il vous est quand même possible d'en créer des nouveaux ou d'en téléverser d'autres depuis l'application elle-même.

Partage des documents

Le système de partage est exactement le même que celui que nous avons nous utilisons déjà. Il n'y a pas de quoi se tromper, rien de nouveau de ce côté. Il se rapproche de celui qui sert à partager les images.

Accédez au document que vous voulez partager, chercher le groupe ou l'utilisateur avec lequel vous voulez bosser et partagez.

partage3.png

On retrouve les options ordinaires : partager avec les utilisateurs, partager via un lien, ajouter un mot de passe et donner un date d'expiration au partage.

partage2.png

Les utilisateurs connectés au document partagé s'affichent dans une simple colonne de droite, avec leur image de profil s'ils en ont une ou la première lettre leur login par défaut.

utilisateurs.png

Les possibilités offertes par Documents

Si on regarde la concurrence, il faut être honnête, il n'y a pas encore de quoi sauter au plafond. Ceci-dit, tout est configurable.

De base, on retrouve 7 styles, dont les différences ne sautent pas tout de suite aux yeux :

option.png

Comme je le dis plus haut, tout est configurable. Pour ajouter un nouveau style : cliquez sur Format et laissez vous aller.

Voici deux captures d'écran pour vous présenter les deux onglets pleins d'options :

alignement.png  effects.png

On est à la limite du DIY (Do It Yourself) mais avec un peu de préparation, on peut configurer toutes les façons que l'on veut d'écrire du texte. Un exemple :

nouveaustyle.pngOui, c'est moche mais c'est un exemple.

Les autres trucs

Pour finir, je remarque que la propagation des modifications n'est pas franchement rapide. C'est sans doute un petit défaut de jeunesse mais ça m'inquiète, étant auto-hébergé. J'ai un débit en upload très lent et je crains des délais de latence horriblement long.

Voilà pour le rapide tour d'horizon !

Gravatar de dada
Original post of dada.Votez pour ce billet sur Planet Libre.

Littlewing : Faire des recherches dans un index SOLR

jeudi 31 octobre 2013 à 10:23

2561885967_f5f0be5834_n.jpgMe voila avec un index flambant neuf ( ou presque) importé en presque 30 minutes. Je n'ai plus qu'à rechercher. Voici ce qu'on peut faire assez simplement "out of the box":

Via l'interface d'administration

L'interface d'administration possède déjà un outil de recherche assez simple d'utilisation. On renseigne le critère de recherche et on obtient la réponse au format souhaité ( JSON, XML, PYTHON, CSV,...)

backup_sonar036.png

Cette option peut être intéressante pour une interface d'administration

Via une requête REST

J'ai fait un simple appel REST avec JERSEY pour effectuer la même requête. J'ai utilisé le mapping des POJO pour mapper la réponse à mon bean.

On retrouve les mêmes paramètres

  1. public class RESTQueryTest {
  2.  
  3. private final static String QUERY_URL = "http://127.0.0.1:8080/customers/customers/select";
  4. public static final int HTTP_STATUS_OK = 200;
  5. private Client client;
  6. private WebResource queryWebResource;
  7. private ClientConfig clientConfig;
  8. private String MAX_ROWS;
  9.  
  10. @Before
  11. public void setUp() throws Exception {
  12. clientConfig = new DefaultClientConfig();
  13. clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
  14. client = Client.create(clientConfig);
  15. queryWebResource = client.resource(QUERY_URL);
  16. }
  17.  
  18. @Test
  19. public void testQueryByLastName() throws Exception {
  20. MultivaluedMap<String, String> parameters = new MultivaluedMapImpl();
  21. parameters.add("q", "lastname:JAN");
  22. parameters.add("wt", "json");
  23.  
  24. ClientResponse response = queryWebResource.queryParams(parameters).type(MediaType.TEXT_PLAIN_TYPE).
  25. accept(MediaType.APPLICATION_JSON_TYPE, MediaType.TEXT_PLAIN_TYPE).get(ClientResponse.class);
  26. assertEquals(response.getStatus(), HTTP_STATUS_OK);
  27. }
  28.  
  29. @Test
  30. public void testQueryFuzzy() throws Exception {
  31. MultivaluedMap<String, String> parameters = new MultivaluedMapImpl();
  32. final String FUZZY_QUERY_BY_LASTNAME = "lastname:JAN~";
  33. parameters.add("q", FUZZY_QUERY_BY_LASTNAME);
  34. parameters.add("wt", "json");
  35. parameters.add("indent", "true");
  36. final int MAX_ROWS = 20;
  37. parameters.add("rows", String.valueOf(MAX_ROWS));
  38.  
  39. ClientResponse response = queryWebResource.queryParams(parameters).type(MediaType.APPLICATION_JSON_TYPE).
  40. accept(MediaType.APPLICATION_JSON_TYPE, MediaType.TEXT_PLAIN_TYPE).get(ClientResponse.class);
  41. assertEquals(response.getStatus(), HTTP_STATUS_OK);
  42. SOLRResponse<CustomerResource> solrResponse=response.getEntity(new GenericType<SOLRResponse<CustomerResource>>(){});
  43. assertNotNull(solrResponse);
  44. assertEquals(solrResponse.getResponse().getDocs().size(), MAX_ROWS);
  45. assertEquals(solrResponse.getResponseHeader().getParams().getQuery(),FUZZY_QUERY_BY_LASTNAME);
  46. }
  47. }

La classe SOLRResponse décrit la réponse JSON, Elle est annotée avec JAXB.

  1. @XmlRootElement
  2. public class SOLRResponse<T> {
  3.  
  4. private SOLRResponseHeader responseHeader ;
  5. private SOLRResponseBody<T> response;
  6.  
  7. public SOLRResponseBody<T> getResponse() {
  8. return response;
  9. }
  10.  
  11. public void setResponse(SOLRResponseBody<T> response) {
  12. this.response = response;
  13. }
  14.  
  15. public SOLRResponseHeader getResponseHeader() {
  16. return responseHeader;
  17. }
  18.  
  19. public void setResponseHeader(SOLRResponseHeader responseHeader) {
  20. this.responseHeader = responseHeader;
  21. }
  22.  
  23.  
  24. }

J'ai rendu cette réponse générique pour ensuite appliquer ce que l'on veut dans les documents (ex. Classe CustomerResource)

Via l'API SOLRJ

Pré-requis

Ajouter la dépendance solr au projet

  1. >
  2. >org.apache.solr>
  3. >solr-solrj>
  4. >${solr.version}>
  5. >

Je trouve cette solution beaucoup plus simple à mettre en oeuvre. Elle prend dynamiquement les champs de la réponse ( qui peuvent changer selon les paramètres d'appels ). De plus il n'y a pas besoin de décrire l'enveloppe de la réponse comme en REST.

  1. public class JavaQueryTest {
  2.  
  3. private final static String QUERY_URL = "http://127.0.0.1:8080/customers/customers";
  4. private HttpSolrServer solrServer;
  5. private SolrQuery solrQuery;
  6.  
  7. @Before
  8. public void setUp() throws Exception {
  9. solrServer = new HttpSolrServer(QUERY_URL);
  10. solrServer.setAllowCompression(true);
  11. solrServer.setMaxRetries(5);
  12. solrQuery = new SolrQuery();
  13. }
  14.  
  15. @Test
  16. public void testQueryFuzzy() throws Exception {
  17. solrQuery.setQuery("TOURET~");
  18. solrQuery.addSort("dtcrea", SolrQuery.ORDER.asc);
  19. QueryResponse response = solrServer.query(solrQuery);
  20. assertNotNull(response);
  21. assertNotNull(response.getResults());
  22. assertFalse(response.getResults().isEmpty());
  23. System.out.println("Premier champ:" + response.getResults().get(1).toString());
  24. List<CustomerResource> customers = response.getBeans(CustomerResource.class);
  25. assertNotNull(customers);
  26. assertFalse(customers.isEmpty());
  27. }
  28. }

Gravatar de Littlewing
Original post of Littlewing.Votez pour ce billet sur Planet Libre.

Articles similaires