PHP Server Side Post для воссоздания Заменить безопасный единый вход - PullRequest
3 голосов
/ 18 марта 2010

Я размещаю, интранет и управляю несколькими системами единого входа для внешних веб-сайтов. Мы всегда делали это через какую-то скрытую форму.

* ** 1003 тысяча два * Пример
<form method="post" action="example.php">
<input type="hidden" value="user" name="user" />  
<input type="hidden" value="password" name="password" />
</form>

Затем мы можем сделать так, чтобы событие javascript отправило скрытую форму за сценой и вошло в систему.

Однако более искушенный пользователь, уже прошедший проверку подлинности на нашем сайте, может просмотреть исходный код и просмотреть имя пользователя и пароль.

Я бы предпочел размещать информацию из PHP-скрипта, чтобы беспрепятственно регистрировать ее на внешнем сайте.

Я провел много исследований в сети и придумал несколько последовательных строк кода, которые люди реализуют, которые, похоже, не работают.

Они обычно похожи на код ниже:

 $ch = curl_init($POSTURL);
 curl_setopt($ch, CURLOPT_POST      ,1);
 curl_setopt($ch, CURLOPT_POSTFIELDS,POSTVARS);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION  ,1);
 curl_setopt($ch, CURLOPT_HEADER      ,0);  // DO NOT RETURN HTTP HEADERS
 curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);  // RETURN THE CONTENTS OF THE CALL
 $Rec_Data = curl_exec($ch);
 curl_close($ch);

Однако, похоже, аутентификация не работает. Если я попытаюсь напечатать то, что возвращает curl_exec, у меня ничего не получится. Я также не уверен, что это будет верный путь.

Я получаю следующую ошибку из моего кода:

Ошибка скручивания: ошибка установки сертификата, проверьте расположение: CAfile: / etc / ssl / certs /ca-certificates.crt CApath: нет

Я не хочу держать пользователей внутри нашего сайта, я просто хочу запустить другой сайт после их аутентификации. Если это работает в стандартном HTML-посте, я смогу воссоздать эту возможность, используя код на стороне сервера. Верно?

Кстати, я сделал что-то подобное в своей прошлой жизни с Coldfusion. Это было намного проще. Конечно, PHP и все его пользователи что-то придумали!

1 Ответ

1 голос
/ 18 марта 2010

Вы не сможете сделать это с помощью cURL или любых других подобных методов.

Пример кода, который вы разместили выше, работает на сервере, а не на клиенте. Поэтому вы аутентифицируете сервер на стороннем веб-сайте, а не на клиенте. Поскольку вы не можете отправить cookie как другой домен клиенту, подпись на стороне сервера довольно бесполезна (ну, если вы не планируете проксировать весь сайт, что на самом деле не является решением).

Когда вы отсиживаетесь и думаете об этом, кого здесь нужно аутентифицировать? Клиент или сервер? Клиент делает.

Вам необходимо выполнить свою работу на стороне клиента, чтобы войти в систему КЛИЕНТА на стороннем веб-сайте. Ваш подход к скрытой форме работает хорошо, но не очень безопасно.

Вы также можете зашифровать значения в HTML и дешифровать их на стороне клиента, используя JavaScript onSubmit, но это может быть безопасностью по незаметности (ваш ключ и алгоритм дешифрования будут доступны любому злоумышленнику, желающему получить значения). 1011 *

Лучшим (ну, с точки зрения безопасности) будет использование Flash или Java или элемента управления ActiveX для отправки запроса на сторонний веб-сайт. Таким образом, ваши учетные данные будут заблокированы в формате, который на самом деле нелегко извлечь (все еще возможно, но недоступно большинству пользователей), и он выполняется на стороне клиента.

...