Brauzerdən SAP GUI işə salınır

Bu yazını ilk dəfə öz səhifəmdə yazmışdım blog, sonra axtarıb bir daha xatırlamamaq üçün amma bloqu heç kim oxumadığından bu məlumatı hər kəslə bölüşmək istədim, bəlkə kimsə faydalı olar.

SAP R/3 sistemlərində parol sıfırlama xidməti ideyası üzərində işləyərkən belə bir sual yarandı – brauzerdən lazımi parametrlərlə SAP GUI-ni necə işə salmaq olar? Bu fikir veb xidmətindən istifadəni nəzərdə tutduğundan, əvvəlcə SAP GUI-dən gələn SOAP sorğusuna cavab vermək və parolu ilkin birinə sıfırlamaq üçün skripti olan veb səhifəyə keçidi olan məktub göndərmək və sonra istifadəçiyə göstərmək. Uğurlu parol sıfırlaması və bu ilkin parolun göstərilməsi haqqında mesaj , sonra mən bu səhifədə SAP GUI-ni işə salmaq üçün bir keçidin də olmasını istərdim. Üstəlik, bu keçid istədiyiniz sistemi açmalıdır və tercihen giriş və parol sahələrini bir anda doldurmalıdır: istifadəçi məhsuldar parolu yalnız iki dəfə doldurmalı olacaq.

SAP Logon-un işə salınması bizim məqsədimiz üçün maraqlı deyildi və sapgui.exe-ni işə salarkən müştəri və istifadəçi adını dəqiqləşdirmək mümkün deyildi, lakin SAP Logon-da müəyyən edilməmiş sistemi işə salmaq mümkün idi. Digər tərəfdən, ixtiyari server parametrləri ilə SAP GUI-nin işə salınması o qədər də aktual deyildi: əgər biz istifadəçinin parolunu sıfırlamaq problemini həll ediriksə, çox güman ki, o, ehtiyac duyduğu parametrlərlə SAP Logon-da artıq lazımi xəttə malikdir və orada özü ilə qarışmağa ehtiyac yoxdur. Lakin göstərilən tələblər SAP GUI Qısayol texnologiyası və sapshcut.exe proqramının özü tərəfindən yerinə yetirildi ki, bu da müəyyən bir "qısayol" istifadə edərək SAP GUI-ni işə salmağa imkan verdi.

Problemin birbaşa həlli: ActiveX obyektindən istifadə edərək sapshcut.exe-ni birbaşa brauzerdən işə salmaq:

function openSAPGui(sid, client, user, password) {
var shell = new ActiveXObject("WScript.Shell");
shell.run('sapshcut.exe -system="'+sid+'" -client='+client+' -user="'+user+'" -pw="'+password+'" -language=RU');
}

Həll pisdir: birincisi, o, yalnız Internet Explorer-də işləyir, ikincisi, bir təşkilatda domen səviyyəsində qadağan edilə bilən brauzerdə müvafiq təhlükəsizlik parametrlərini tələb edir və icazə verilsə belə, brauzer qorxulu bir pəncərə göstərir. istifadəçiyə xəbərdarlıq:

Brauzerdən SAP GUI işə salınır

İnternetdə №2 həll tapdım: öz veb protokolunuzu yaratmaq. HKEY_CLASSES_ROOT bölməsindəki reyestrdə özümüz Windows-da qeydiyyatdan keçirdiyimiz protokolu göstərən keçiddən istifadə edərək bizə lazım olan proqramı işə salmağa imkan verir. SAP GUI Qısayolunun bu bölmədə öz alt bölməsi olduğundan, ora boş dəyərlə URL Protokolu sətir parametrini əlavə edə bilərsiniz:

Brauzerdən SAP GUI işə salınır

Bu protokol başlayır sapgui.exe parametri ilə /QISA, məhz bizə lazım olan budur:

Brauzerdən SAP GUI işə salınır

Yaxşı və ya tamamilə ixtiyari bir protokol etmək istəyiriksə (məsələn, sapshcut), onda siz onu aşağıdakı reg faylından istifadə edərək qeydiyyatdan keçirə bilərsiniz:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOTsapshcut]
@="sapshcut Handler"
"URL Protocol"=""
[HKEY_CLASSES_ROOTsapshcutDefaultIcon]
@="sapshcut.exe"
[HKEY_CLASSES_ROOTsapshcutshell]
[HKEY_CLASSES_ROOTsapshcutshellopen]
[HKEY_CLASSES_ROOTsapshcutshellopencommand]
@="sapshcut.exe "%1""

İndi bir internet səhifəsində protokolu göstərən bir keçid etsək Sapgui.Qısayol.Fayl Bənzər bir şəkildə:

<a href='Sapgui.Shortcut.File: -system=SID -client=200'>SID200</a>

Belə bir pəncərə görməliyik:

Brauzerdən SAP GUI işə salınır

Və hər şey əla görünür, lakin "İcazə verin" düyməsini kliklədiyiniz zaman görürük:

Brauzerdən SAP GUI işə salınır

Vay, brauzer boşluq düyməsini %20-yə çevirdi. Yaxşı, digər simvollar da faiz simvolu ilə öz rəqəmsal koduna kodlaşdırılacaq. Və ən xoşagəlməz hal odur ki, burada brauzer səviyyəsində heç bir şey edilə bilməz (burada hər şey standarta uyğun olaraq edilir) - brauzer belə simvolları sevmir və Windows əmr tərcüməçisi belə kodlanmış dəyərlərlə işləmir. Və daha bir mənfi - bütün sətir protokol adı və hətta iki nöqtə də daxil olmaqla parametr kimi ötürülür (sapgui.shortcut.file:). Üstəlik, eyni olsa da sapshcut.exe onun üçün parametr olmayan hər şeyi ləğv edə bilər ("-" simvolu ilə başlayır, sonra ad, "=" və dəyər), yəni. kimi bir xəttsapgui.shortcut.file: -system=SID"hələ işləyəcək, sonra boşluq olmadan"sapgui.shortcut.file:-system=SID"artıq işləmir.

Belə çıxır ki, prinsipcə, URI protokolundan istifadə üçün iki seçim var:

  1. Parametrlər olmadan istifadə: Biz bütün sistemlərimiz üçün bütün növ protokollar yaradırıq SIDMANDT, kimi AAA200, BBB200 və s. İstədiyiniz sistemi işə salmaq lazımdırsa, o zaman seçim olduqca işləkdir, lakin bizim vəziyyətimizdə uyğun deyil, çünki heç olmasa istifadəçi girişini köçürmək istərdiniz, lakin bu, bu şəkildə edilə bilməz.
  2. Zəng etmək üçün sarğı proqramından istifadə edin sapshcut.exe və ya sapgui.exe. Bu proqramın mahiyyəti sadədir - o, brauzerin veb protokolu vasitəsilə ona ötürdüyü sətri götürməli və onu Windows-un qəbul etdiyi nümayəndəliyə çevirməlidir, yəni. bütün simvol kodlarını yenidən simvollara çevirir (bəlkə də sətri parametrlərə görə təhlil edir) və artıq zəmanətli düzgün əmrlə SAP GUI-ni çağırır. Bizim vəziyyətimizdə, bu da tamamilə uyğun deyil (buna görə də mən onu yazmadım), çünki bütün istifadəçi kompüterlərində protokol əlavə etmək bizim üçün kifayət deyil (domen daxilində bu hələ də yaxşıdır, baxmayaraq ki, daha yaxşı olar. bu təcrübədən qaçın), lakin burada proqramı PC-də daha çox yerləşdirməyə ehtiyacımız olacaq, həmçinin proqram təminatı PC-də yenidən quraşdırıldıqda onun getməməsinə daim əmin olun.

Bunlar. Biz də bu seçimi bizə uyğun olmadığı üçün rədd edirik.

Bu nöqtədə mən artıq düşünməyə başlamışdım ki, SAP GUI-ni brauzerdən lazımi parametrlərlə işə salmaq fikri ilə vidalaşmalıyam, lakin sonra ağlıma belə bir fikir gəldi ki, SAP Logon-da qısayol yarada bilərsiniz və onu iş masanıza kopyalayın. Bu üsuldan bir dəfə istifadə etdim, lakin bundan əvvəl qısayol faylına xüsusi olaraq baxmadım. Və məlum oldu ki, bu qısayol uzantılı adi mətn faylıdır .sap. Əgər siz onu Windows-da işlədirsinizsə, SAP GUI bu faylda göstərilən parametrlərlə işə başlayacaq. "Bingo!"

Bu faylın formatı təxminən aşağıdakı kimidir (başlanğıcda başlanmış əməliyyat da ola bilər, lakin mən onu buraxmışam):

[System]
Name=SID
Client=200
[User]
Name=
Language=RU
Password=
[Function]
Title=
[Configuration]
GuiSize=Maximized
[Options]
Reuse=0

Görünür, lazım olan hər şey: sistem identifikatoru, müştəri, istifadəçi adı və hətta parol. Və hətta əlavə parametrlər: başlıq - pəncərə başlığı, GuiSize — işləyən pəncərənin ölçüsü (tam ekran və ya yox) və Yenidən istifadə — yeni pəncərə açmaq və ya eyni sistemlə artıq açıq pəncərədən istifadə etmək lazımdırmı. Ancaq dərhal bir nüans ortaya çıxdı - məlum oldu ki, SAP Logon-da parol təyin edilə bilməz, xətt bloklanır. Məlum oldu ki, bu, təhlükəsizlik məqsədilə edilib: o, SAP Logon-da yaradılmış bütün qısa yolları faylda saxlayır. sapshortcut.ini (Yaxınlıqda saplogon.ini Windows istifadəçi profilində) və orada, şifrələnmiş olsalar da, çox güclü şifrələnmirlər və istəsələr, deşifrə edilə bilər. Ancaq bunu reyestrdəki bir parametrin dəyərini dəyişdirməklə həll edə bilərsiniz (standart dəyər 0):

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity]
"EnablePassword"="1"

Bu, SAP Logon-da qısayol yaratmaq formasına daxil olmaq üçün Parol sahəsini açır:

Brauzerdən SAP GUI işə salınır

Və bu sahəyə parol daxil etdiyiniz zaman o, müvafiq sətirdə yerləşdiriləcək
sapshortcut.ini, lakin siz qısayolu masaüstünə dartdığınız zaman o, orada görünmür - ancaq onu əl ilə əlavə edə bilərsiniz. Şifrə şifrələnib, 111111 üçün bu belə olacaq: PW_49B02219D1F6, 222222 üçün - PW_4AB3211AD2F5. Ancaq bizi daha çox maraqlandırır ki, bu parol xüsusi PC-dən asılı olmayaraq bir şəkildə şifrələnir və parolu ilkin birinə sıfırlasaq, bu sahədə əvvəlcədən məlum olan bir dəyərdən istifadə edə bilərik. Yaxşı, təsadüfi yaradılmış paroldan istifadə etmək istəsək, bu şifrənin alqoritmini başa düşməliyik. Ancaq verilən nümunələrə görə, bunu etmək çətin olmayacaq. Yeri gəlmişkən, SAP GUI 7.40-da bu sahə formadan tamamilə yox oldu, lakin doldurulmuş parolu olan faylı düzgün qəbul edir.

Yəni məlum olur ki, brauzerdə sadəcə .sap uzantısı və istədiyiniz formatı olan faylın linkini vurmaq lazımdır - və o, onu SAP GUI Qısayol tipli bir fayl kimi açmağı təklif edəcək (təbii olaraq quraşdırılmış SAP GUI ilə kompüter) və müəyyən parametrlərlə SAP GUI pəncərəsini açacaq (Əgər SID və müştəri cütü bu kompüterdə SAP Giriş siyahısındadırsa).

Ancaq aydındır ki, heç kim sadəcə əvvəlcədən fayl yaratmayacaq və onları saytda saxlamayacaq - onlar lazımi parametrlər əsasında yaradılmalıdır. Məsələn, qısa yollar yaratmaq üçün PHP skripti yarada bilərsiniz (sapshcut.php):

<?php
$queries = array();
parse_str($_SERVER['QUERY_STRING'], $queries);
$Title = $queries['Title'];
$Size = $queries['Size'];
$SID = $queries['SID'];
$Client = $queries['Client'];
if($Client == '') { $Client=200; };
$Lang = $queries['Language'];
if($Lang=='') { $Lang = 'RU'; };
$User = $queries['Username'];
if($User<>'') { $Password = $queries['Password']; };
$filename = $SID.$Client.'.sap';
header('Content-disposition: attachment; filename='.$filename);
header('Content-type: application/sap');
echo "[System]rn";
echo "Name=".$SID."rn";
echo "Client=".$Client."rn";
echo "[User]rn";
echo "Name=".$Username."rn";
echo "Language=".$Lang."rn";
if($Password<>'') echo "Password=".$Password."rn";
echo "[Function]rn";
if($Title<>'') {echo "Title=".$Title."rn";} else {echo "Title=Вход в системуrn";};
echo "[Configuration]rn";
if($Size=='max') { echo "GuiSize=Maximizedrn"; };
echo "[Options]rn";
echo "Reuse=0rn";
?>

İstifadəçi adı və parol göstərməsəniz, giriş və parol tələb edən aşağıdakı pəncərəni alacaqsınız:

Brauzerdən SAP GUI işə salınır

Yalnız girişi keçsəniz, giriş sahəsi doldurulacaq və parol sahəsi boş olacaq. Əgər istifadəçiyə həm login, həm də parol versək, lakin PC-də istifadəçinin [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] bölməsində reyestrdə EnablePassword açarı 0-a təyin edilmişsə, onda biz eyni şeyi alırıq. Və yalnız bu açar 1-ə təyin edilərsə və biz həm adı, həm də ilkin parolu keçirsək, sistem dərhal iki dəfə yeni daimi parol daxil etməyi təklif edəcək. Bunu əldə etməyimiz lazım idi.

Nəticə olaraq, yuxarıda göstərilənlərin hamısının nümunəsi kimi nəzərdən keçirilən seçimlər toplusumuz var:

<html>
<head>
<script>
function openSAPGui(sid, client, user, password) {
var shell = new ActiveXObject("WScript.Shell");
shell.run('sapshcut.exe -system="'+sid+'" -client='+client+' -user="'+user+'" -pw="'+password+'" -language=RU');
}
</script>
</head>
<body>
<a href='' onclick="javascript:openSAPGui('SID', '200', 'test', '');"/>Example 1: Execute sapshcut.exe (ActiveX)<br>
<a href='Sapgui.Shortcut.File: -system=SID -client=200'>Example 2: Open sapshcut.exe (URI)</a><br>
<a href='sapshcut.php?SID=SID&Client=200&User=test'>Example 3: Open file .sap (SAP GUI Shortcut)</a><br>
</body>
</html>

Sonuncu variant mənə uyğun gəldi. Lakin SAP qısa yolları yaratmaq əvəzinə, məsələn, brauzerdən açıldığında sizin üçün SAP GUI pəncərəsini açacaq CMD faylları yaratmaqdan da istifadə edə bilərsiniz. Aşağıda bir nümunə (sapguicmd.php) SAP Logon konfiqurasiyasına ehtiyac olmadan SAP GUI-ni tam əlaqə sətri ilə birbaşa işə salın:

<?php
$queries = array();
parse_str($_SERVER['QUERY_STRING'], $queries);
$Title = $queries['Title'];
$ROUTER = $queries['ROUTER'];
$ROUTERPORT = $queries['ROUTERPORT'];
$HOST = $queries['HOST'];
$PORT = $queries['PORT'];
$MESS = $queries['MESS'];
$LG = $queries['LG'];
$filename = 'SAPGUI_';
if($MESS<>'') $filename = $filename.$MESS;
if($HOST<>'') $filename = $filename.$HOST;
if($PORT<>'') $filename = $filename.'_'.$PORT;
$filename = $filename.'.cmd';
header('Content-disposition: attachment; filename='.$filename);
header('Content-type: application/cmd');
echo "@echo offrn";
echo "chcp 1251rn";
echo "echo Вход в ".$Title."rn";
echo "set SAP_CODEPAGE=1504rn";
echo 'if exist "%ProgramFiles(x86)%SAPFrontEndSapGuisapgui.exe" set gui=%ProgramFiles(x86)%SAPFrontEndSapGuisapgui.exe'."rn";
echo 'if exist "%ProgramFiles%SAPFrontEndSapGuisapgui.exe" set gui=%ProgramFiles%SAPFrontEndSapGuisapgui.exe'."rn";
echo "set logon=";
if($ROUTER<>'') echo "/H/".$ROUTER;
if($ROUTERPORT<>'') echo "/S/".$ROUTERPORT;
if($MESS<>'') echo "/M/".$MESS;
if($HOST<>'') echo "/H/".$HOST;
if($PORT<>'') echo "/S/".$PORT;
if($LG<>'') echo "/G/".$LG;
echo "rn";
echo '"%gui%" %logon%'."rn";
?>

Mənbə: www.habr.com

Добавить комментарий