SAP GUI avamine brauserist

Selle artikli kirjutasin alguses oma blogi, et hiljem ei peaks uuesti otsima ja meenutama, aga kuna keegi ei loe blogi, siis tahtsin seda teavet kÔigiga jagada, Àkki kellelegi tuleb see kasuks.

Töötades SAP R/3 parooli lĂ€htestamise teenuse idee kallal, tekkis kĂŒsimus — kuidas kĂ€ivitada SAP GUI vajalike parameetritega brauserist? Kuna see idee hĂ”lmas veebiteenuse kasutamist, mis töötas kĂ”igepealt SOAP-pĂ€ringu kaudu SAP GUI-st ja saatis seejĂ€rel e-kirja lingiga veebilehte, kus oli parooli lĂ€htestamise skript, ja pĂ€rast seda kuvati kasutajale sĂ”num edukast parooli lĂ€htestamisest ja see algne parool, siis tahtsin, et sellel lehel oleks ka link SAP GUI avamiseks. Samuti, et see link avaks vajaliku sĂŒsteemi ja soovitavalt kohe tĂ€idetud sisselogimise ja parooli vĂ€ljad: kasutajal jÀÀb ainult tĂ€ita tootmisparool kaks korda.

SAP Logoni kĂ€ivitamine ei olnud meie eesmĂ€rgil huvitav, aga sapgui.exe kĂ€ivitamisel ei saanud mÀÀrata mandanti ja kasutajanime, kuid sĂŒsteemi sai siiski kĂ€ivitada, mis ei olnud SAP Logonis mÀÀratletud. Teisest kĂŒljest, SAP GUI kĂ€ivitamine suvaliste serveri parameetritega ei olnud eriti aktuaalne: kui lahendame kasutaja parooli lĂ€htestamise probleemi, siis tĂ”enĂ€oliselt on tal juba SAP Logonis vajalik rida vajalike seadistustega ja ei ole vaja oma seadistusi lisada. Siiski vastas nĂ”uetele tehnoloogia SAP GUI Shortcut ja programm sapshcut.exe, mis vĂ”imaldas kĂ€ivitada SAP GUI teatud

Lahendus otse: sapshcut.exe kÀitamine brauserist ActiveX objekti abil:

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');
}

Lahendus on halb: esiteks töötab see ainult Internet Exploreris, teiseks nÔuab see vastavaid turvaseadeid brauseris, mis vÔivad organisatsioonis olla domeenil pÔhinevalt keelatud, ja isegi kui need on lubatud, siis nÀitab brauser kasutajale hirmutavat hoiatusteadet:

SAP GUI avamine brauserist

Lahendus №2 leidsin internetist: enda veebiprotokolli loomine. See vĂ”imalik kĂ€ivitada vajalik rakendus lingi kaudu, mÀÀrates protokolli, mille registreerime Windowsis registris HKEY_CLASSES_ROOT jaotises. Kuna SAP GUI Shortcutil on selles jaotises oma ala, saame sinna lisada stringiparameetri URL Protocol tĂŒhja vÀÀrtusega:

SAP GUI avamine brauserist

See protokoll kÀivitab sapgui.exe parameetriga /SHORTCUT, mis meie jaoks vajalik on:

SAP GUI avamine brauserist

VÔi kui soovime teha suvalise protokolli (nÀiteks, sapshcut), siis saame selle registreerida jÀrgmise reg-failiga:

Windowsi registri redaktor versioon 5.00
[HKEY_CLASSES_ROOTsapshcut]
@="sapshcut Handler"
"URL Protokoll"=""
[HKEY_CLASSES_ROOTsapshcutDefaultIcon]
@="sapshcut.exe"
[HKEY_CLASSES_ROOTsapshcutshell]
[HKEY_CLASSES_ROOTsapshcutshellopen]
[HKEY_CLASSES_ROOTsapshcutshellopencommand]
@="sapshcut.exe "%1""

NĂŒĂŒd, kui me veebilehel loome lingi protokolli mÀÀramisega Sapgui.Shortcut.File niimoodi:

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

meil peaks avanema jÀrgmine aken:

SAP GUI avamine brauserist

Ja tundub, et kĂ”ik on hĂ€sti, aga kui vajutame ‘Luba’ nuppu, nĂ€eme:

SAP GUI avamine brauserist

Oi, brauser muundas tĂŒhiku -ks. Samuti kodeeritakse teised sĂŒmbolid nende numbrikoodideks protsendi sĂŒmboliga. Ja kĂ”ige ebameeldivam on see, et brauseri tasemel ei saa midagi teha (see on kĂ”ik standardite kohaselt tehtud) — brauser ei talu selliseid sĂŒmboleid, ja Windowsi kĂ€surea tĂ”lgendaja ei tööta selliste kodeeritud vÀÀrtustega. Ja veel ĂŒks miinus — parameetrina edastatakse kogu string, sealhulgas protokolli nimi ja isegi koolon:sapgui.shortcut.file:). Kuigi sama sapshcut.exe oskab kĂ”rvaldada kĂ”ik, mis ei ole tema jaoks parameeter (alustades sĂŒmbolist ‘-‘, siis nimi, ‘=’ ja vÀÀrtus), st rida nagu ‘sapgui.shortcut.file: -system=SID’ töötab, aga ilma tĂŒhikuta ‘sapgui.shortcut.file:-system=SID’ ei tööta enam.

KokkuvÔttes on olemas kaks varianti URI-protokolli kasutamiseks:

  1. Kasutamine ilma parameetrita: Loome hulga protokolle meie sĂŒsteemide jaoks nagu SIDMANDT, nĂ€iteks AAA200, BBB200 jne. Kui on vaja lihtsalt vajalik sĂŒsteem kĂ€ivitada, siis see variant on tĂ€iesti toimiv, aga meie puhul ei sobi, kuna tahaksime ka kasutajanime edastada, mida niimoodi teha ei saa.
  2. Kasutame wrapper-programmi kutsumiseks sapshcut.exe vĂ”i sapgui.exeAntud programmi olemus on lihtne — see peab vĂ”tma selle rea, mille brauser edastab veebiprotokolli kaudu, ja muutma selle esituseks, mida Windows vastu vĂ”tab, st muudab kĂ”ik sĂŒmbolite koodid tagasi sĂŒmboliteks (vĂ”ib-olla isegi analĂŒĂŒsib rea parameetreid) ning kutsub vĂ€lja SAP GUI garanteeritult Ă”ige kĂ€suga. Meie jaoks ei sobi see ka pĂ€ris hĂ€sti (seetĂ”ttu ei hakanud ma seda kirjutama), sest meil on juba vĂ€he, et lisada protokoll kĂ”ikidele kasutajakontodele (domeenis on see veel mĂ”eldav, ehkki tasub vĂ€ltida sellist praktikat), kuid siin on veel vaja programm paigaldada arvutisse ja pidevalt jĂ€lgida, et see ei kaoks tarkvara uuendamise kĂ€igus.

Seega viskame ka selle variandi kÔrvale, kuna see ei sobi meile.

Siin hakkasin juba mĂ”tlema, et tuleb loobuda ideest kĂ€ivitada SAP GUI vajalike parameetritega brauserist, kuid mĂ”te tuli, et SAP Logonis saab luua otsetee ja selle saab kopeerida töölauale. Olen kunagi sellist viisi kasutanud, kuid enne ei olnud ma otsetee faili spetsiaalselt vaadanud. Selgus, et see otsetee on tavaline tekstifail laiendiga .sap. Ja kui seda Windowsis avada — kĂ€ivitub SAP GUI parameetritega, mis on selles failis mĂ€rgitud. "Bingo!"

Selle faili formaat on umbes jÀrgmine (seal vÔib olla ka kÀivitatav tehing alguses, kuid ma jÀtsin selle vÀlja):

[System]
Nimi=SID
Kliendi=200
[User]
Nimi=
Keel=RU
Parool=
[Function]
Pealkiri=
[Configuration]
GuiSuurus=Maximeeritud
[Options]
Taaskasuta=0

Tundub, et kĂ”ik vajalik on olemas: ning sĂŒsteemi identifikaator, mandant, kasutajanimi ja isegi parool. Ja isegi lisaparameetrid: Title — akna pealkiri, GuiSize — akna suurus (kas tĂ€isekraan vĂ”i mitte) ja Reuse — kas avada kindlasti uus aken vĂ”i kasutada juba avatud sama sĂŒsteemiga. Kuid kohe tuli probleem — SAP Logonis ei saanud parooli seada, vĂ€li oli lukustatud. Selgus, et see on tehtud turvakaalutlustel: kĂ”ik SAP Logonis loodud otseteed salvestatakse failis sapshortcut.ini (Windowsi kasutajaprofiili kĂ”rval asuv saplogon.ini fail) ja seal on need, kuigi salastatud, mitte liiga tugevalt ning suure sooviga on need vĂ”imalik dekrĂŒpteerida. Kuid seda on vĂ”imalik lubada, muutes ĂŒhe parameetri vÀÀrtust registris (vaikimisi vÀÀrtus 0):

Windowsi registri redaktor versioon 5.00
[HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity]
"EnablePassword"="1"

See vabastab parooli sisestamiseks vÀlja SAP Logoni otsetee loomise vormis:

SAP GUI avamine brauserist

Ja kui sisestate selle vÀlja parooli, siis see kuvatakse vastavas reas.
sapshortcut.ini, aga kui lohistada otsetee töölaud, siis see ei ilmu sinna – aga saate selle sinna kĂ€sitsi lisada. Parool on krĂŒptitud, 111111 puhul on selle vorm jĂ€rgmine: PW_49B02219D1F6, 222222 puhul – PW_4AB3211AD2F5. Kuid meid huvitab rohkem see, et see parool krĂŒptitakse ĂŒhtemoodi, mis ei sĂ”ltu konkreetsest arvutist ja kui me taastame parooli algseisusse, siis saame selles vĂ€lja kasutada ĂŒhte eelnevalt teadaolevat vÀÀrtust. Kui aga tahame kasutada vabalt loodud parooli, peame mĂ”istma selle krĂŒptimisalgoritmi. Aga antud nĂ€idete jĂ€rgi ei tohiks seda keeruline olla. Muide, SAP GUI 7.40-s on see vĂ€li ĂŒldse vormist kadunud, aga fail, millel on tĂ€idetud parool, tunnustatakse korrektselt.

See tĂ€hendab, et brauseris piisab failile, millel on laiend .sap ja Ă”ige formaadiga klĂ”psamisest – ja see pakub vĂ€lja avada selle SAP GUI otsetee failina (loomulikult arvutis, kus on paigaldatud SAP GUI) ja avab meile SAP GUI akna nĂ€idatud parameetritega (kui SID ja mandaant on sellel arvutil SAP Logoni nimekirjas).

Aga muidugi ei hakka keegi lihtsalt faile eelnevalt looma ja veebilehele ladustama – need tuleb genereerida lĂ€htudes vajalikest parameetritest. NĂ€iteks vĂ”ib luua PHP skripti otseteede genereerimiseks (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=SĂŒsteemi siseneminern";};
echo "[Configuration]rn";
if($Size=='max') { echo "GuiSize=Maximizedrn"; };
echo "[Options]rn";
echo "Reuse=0rn";
?>

Kui kasutajanime ja parooli ei sisestata, siis saame jĂ€rgmise akna logi ja parooli kĂŒsimisega:

SAP GUI avamine brauserist

Kui edastada ainult kasutajanimi, siis kasutajanime vĂ€ljad on tĂ€idetud, kuid parooli vĂ€li jÀÀb tĂŒhjaks. Kui me edastame nii kasutajanime kui parooli, kuid kasutaja registris on vĂ”tme EnablePassword vÀÀrtus [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] seatud 0-le, siis saame sama tulemuse. Ainult juhul, kui see vĂ”ti on seatud 1-le ja me edastame nii nime kui algse parooli, palub sĂŒsteem kohe kahel korral sisestada uus alaline parool. Just seda soovisime saavutada.

KokkuvÔttes saame jÀrgmise kaalutud vÔimaluste kogumi, et illustreerida eelöeldut:

<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', '');"/>Näide 1: Käivita sapshcut.exe (ActiveX)<br>
<a href='Sapgui.Shortcut.File: -system=SID -client=200'>Näide 2: Avage sapshcut.exe (URI)</a><br>
<a href='/et/sapshcut.php/?SID=SID&Client=200&User=test'>Näide 3: Avage fail .sap (SAP GUI otsetee)</a><br>
</body>
</html>

Viimane variant sobis mulle. Samuti on vĂ”imalik SAP-i otseteed genereerimise asemel kasutada nĂ€iteks CMD-failide genereerimist, mis avavad tehes brauseris SAP GUI akna. Allpool toome nĂ€ite (sapguicmd.php) SAP GUI otse kĂ€ivitamiseks koos tĂ€ieliku ĂŒhenduse rea mÀÀramisega, ilma et oleks vaja seadistatud SAP Logon’i:

<?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 Sisenemine ".$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";
?>

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster