IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

idHTTP et upload via php et ModSecurity


Sujet :

Composants VCL Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut idHTTP et upload via php et ModSecurity
    J'avais un code qui fonctionnait bien en appelant un fichier php de mon site pour uploader un fichier.
    Depuis quelques temps, cela ne marche pas car je pense que mon hébergeur à ajouter le ModSecurity.

    J'obtiens cela en log sur mon site :
    ModSecurity: Access denied with code 406 (phase 2). Operator EQ matched 0 at REQUEST_HEADERS_NAMES. [file "remote server"] [line "-1"] [id "600004"] [msg "Malware.Expert - Unauthenticated upload"]
    Et voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
      HTTP := TIdHTTP.Create;
      HTTP.Request.UserAgent := 'Mozilla/5.0 (compatible;MyApp)';
      Stream := TStringStream.Create;
      Params := TIdMultipartFormDataStream.Create;
      Params.AddFile('toto', Fn, 'application/octet-stream');  // MIME
      try
        HTTP.Post(Website+'/support/upload.php', Params, Stream);  // là, cela génére un code erreur 406
        result := true;
      except
        on E: Exception do
        begin
          Memo.Lines.Insert(0, 'ERROR: (P) ' + E.Message);
        end;
      end;
      Params.Free;
      Stream.Clear;
      Stream.Free;
      HTTP.Free;

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Si vous le pouvez passer plutôt par un FTP avec Login\Password si c'est une application d'administration
    Si c'est une application installée en clientèle, faudrait vous renseigner si cela supporte une Basic Auth ou une Bearer Auth a ajouter en entête de la requête HTTP soit via TIdHTTP.OnAuthorization
    Il faudrait aussi respecter les normes de nommage de fichier défini par votre hébergeur, vous avez un travail de recherche en amont que les membres du forum ne pourront pas deviner si vous ne vérifiez pas vous mêmes les configurations de vos serveurs.

    Faudra aussi songer au HTTPS sur le serveur et TIdSSLIOHandlerSocketOpenSSL pour le client
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut
    1) C'est bien installé en "clientèle" dans le cas d'une Basic Auth ou d'une Bearer Auth que devrais-je ajouter ?
    2) Et faudra-t-il fournir un login/mdp aussi ?
    3) Pour ce qui est du SSL, oui néanmoins le fichier uploadé est crypté en amont de l'upload.
    Merci.

  4. #4
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    des fois ça déconne juste parce qu'il n'y a pas de USER_AGENT envoyé, peut-être que ça suffirait d'en mettre un dans les entêtes ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut
    oui, c'est ce que j'avais lu et il y en a un dans mon code, est ce suffisant ?

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Citation Envoyé par sbadecoder Voir le message
    1) C'est bien installé en "clientèle" dans le cas d'une Basic Auth ou d'une Bearer Auth que devrais-je ajouter ?
    2) Et faudra-t-il fournir un login/mdp aussi ?
    la réponse 2) aura la réponse via la réponse 1)
    Il vous faut voir les causes de l'erreur, que signifie exactement "Unauthenticated"
    Voir aussi REQUEST_HEADERS_NAMES car mêmes les entêtes peuvent faire parti d'une règle, USER_AGENT n'étant qu'un seul des headers parmi d'autres.
    Vous devez demander à l'hébergeur les règles définies.


    Citation Envoyé par sbadecoder Voir le message
    3)Pour ce qui est du SSL, oui néanmoins le fichier uploadé est crypté en amont de l'upload.
    le HTTPS négocie la crypto avant l'envoie de donnée, donc si je me trompe pas avant l'envoie du header
    Vous pouvez crypter de votre côté mais pour que cela soit efficace, cela doit être fait avec une clé asymétrique, la clef publique distribuée à la clientèle, pour chiffrer, l'autre, la clef privée, pour déchiffrer.
    Si vous utilisez un chiffrage maison genre XOR, Code César, Transcodage divers ou même un simple AES, dès que l'on a accès à la clé symétrique, c'est comme si il n'y avait aucune sécurité.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut
    Demande effectuée auprès de l'hébergeur.
    Pour mon cryptage, il est en double couche de type AES / RSA.

  8. #8
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Lorsque vous désignez " double couche ", je suppose qu'il s'agit d'un chiffrage AES du fichier pour la confidentialité et l'adjonction d'une signature SHA-* via RSA pour l'authenticité
    L'approche idéal pour combiner sécurité tout en conservant des performances.

    En espérant que votre hébergeur sera au niveau pour vous accompagnez, surtout si celui-ci est payant.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut
    Première réponse de l'hébergeur (payant), désactiver le ModSecurity.
    J'attends une autre réponse avec conservation du ModSecurity.

  10. #10
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    d'après ce que je vois, il faudrait consulter le fichier conf de modSecure

    https://malware.expert/tutorial/writ...ecurity-rules/

    il doit contenir une règle du type

    SecRule REQUEST_LINE|REQUEST_HEADERS|REQUEST_HEADERS_NAMES "@contains () {" "id:420008,phase:2,t:none,t:lowercase,deny,status:500,log,msg:'Malware expert - user-agent: Bash ENV Variable Injection Attack'"
    qui donnerait la raison exacte du refus et ce qu'il faut faire pour que la requête soit autorisée
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut
    Réponse 2
    La règle que vous visualisez est la suivante:

    La règle vérifie que :
    - des cookies sont présents
    - un header "authorization" est présent
    - un header "referer" est présent

    Si aucune des 3 conditions matche, alors cela est bloqué.

  12. #12
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par sbadecoder Voir le message
    Réponse 2
    La règle que vous visualisez est la suivante:

    La règle vérifie que :
    - des cookies sont présents
    - un header "authorization" est présent
    - un header "referer" est présent

    Si aucune des 3 conditions matche, alors cela est bloqué.
    il te manque probablement le referer, c'est supposé être l'URL d'où tu viens, quand tu viens d'une page web contenant un lien vers un document à charger.

    si Indy ne le propose pas autrement, tu peux ajouter un Custom header "Referer: http://cequetuveux"
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut
    Cela refonctionne avec IdHTTP.Request.Referer
    Merci à chacun pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Upload ftp via php
    Par Sohhf dans le forum Langage
    Réponses: 1
    Dernier message: 10/06/2016, 11h05
  2. [PHP 5.3] upload fichier sur ftp via php
    Par victoires dans le forum Langage
    Réponses: 1
    Dernier message: 11/10/2011, 14h49
  3. [Upload] Lecture de fichier mp3 via PHP
    Par nodogeid dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2007, 12h00
  4. Réponses: 1
    Dernier message: 10/10/2006, 14h19
  5. [FTP] upload de fichiers via PHP
    Par r-zo dans le forum Langage
    Réponses: 7
    Dernier message: 02/01/2006, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo