PDA

View Full Version : [C# - PHP] Mettere in sicurezza una comunicazione "SOAP Client e PHP Web Servervice"


qwerty_race
16-02-2021, 09:11
Salve,
vorrei rendere sicura una comunicazione tra un Client in C# e un Web Service in PHP, attualmente comunicano in chiaro tra loro.

La cifratura al limite non mi interessa molto se potrebbe diventare un problema di sviluppo, dato i due linguaggi in ballo.

Mi interessa più creare una chiave di riconoscimento per ogni comunicazione che devo effettuare.

Il Client Comunica con il Services tramite SOAP, quindi ho aggiunto un "Riferimento Web" al Progetto.


Posto uno stralcio di codice per capire come è strutturato:

Client C#:

private static WebReference.My_Service wsMyService = new WebReference.My_Service();

UserData = JsonConvert.DeserializeObject<dynamic>(wsMyService.GetUser("email@email.it"));

string Nome = UserData.Nome;



Services PHP:

<?php
require_once('lib/nusoap.php');

$server = new soap_server();
$server->configureWSDL('My_Service', 'urn:My_Service');


GetUser($_email)
{
return json_encode( /*** tutta la query al Database ***/ );
}


$server->register('GetUser',
// param
array('_sEmail'=>'xsd:string'),
// return
array('return'=>'xsd:string'),
// namespace
"https://www.my-site.it",
// soapaction
false,
// style
'rpc',
// use
'encoded',
// description
'Get User');


$server->service(file_get_contents('php://input'));
?>


Potreste darmi qualche consiglio su come muovermi?

Grazie mille!

Kaya
16-02-2021, 09:24
Ma non è più rapido mettere tutto sotto HTTPS e buonanotte? (o non ho capito io il problema?)

qwerty_race
16-02-2021, 11:15
Ma non è più rapido mettere tutto sotto HTTPS e buonanotte? (o non ho capito io il problema?)

Ma se metto sotto HTTPS evito che qualcuno utilizzi il WebService ed elimini dati oppure estragga dati degli utenti?

Se evita questo OK!

Potresti darmi una dritta per come fare?

Kaya
16-02-2021, 12:23
Scusa ma allora la domanda posta all'inizio non era molto ben fatta.
Tu vuoi mettere in sicurezza il sistema affinchè non risponda a chiunque conosca l'endpoint, ma con una sorta di autenticazione.

Direi allora assumendo che usi apache
- Metti tutto sotto https (con un certificato tuo oppure letsencrypt che fai prima)
- Costruisci un "basilare" sistema di autenticazione (ad esempio https://stackoverflow.com/questions/2737685/how-to-do-authentication-using-soap )

qwerty_race
17-02-2021, 09:22
- Costruisci un "basilare" sistema di autenticazione (ad esempio https://stackoverflow.com/questions/2737685/how-to-do-authentication-using-soap )

Ho fatto tutta la parte PHP e WSDL nel server, però:
dal Client quando aggiungo un nuovo "Riferimento Web", "https://www.mysite.it/test.php?wsdl" visualizzo lo schema XML come dovrebbe essere, termino la procedura correttamente, ma poi quando vado ad utilizzarlo:


private MyWebServices myWebServices = new MyWebServices();


Mi da errore:
Il nome di tipo o di spazio dei nomi 'MyWebServices' non è stato trovato, probabilmente manca una direttiva Using o un riferimento all'assembly.

Inoltre se faccio un "Aggiorna Riferimento Web" mi da il seguente errore:

Errore di strumento personalizzato
'MSDiscoCodeGenerator', Impossibile trovare una definizione per http://schamas.xmlsoap.org/wsdl/:MyBinding perchè manca la descrizione del servizio con spazio dei nome http://schamas.xmlsoap.org/wsdl/.
Nome parametro: name


Come posso risolvere questa cosa?

Kaya
17-02-2021, 09:58
Qui hai un qualche errore in C# che non conosco e per cui alzo le mani.
Tuttavia penso sia anche difficile poter poi dare un aiuto se metti una riga di tutto il codice......