home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 April / Chip_2003-04_cd1.bin / tema / krypta / articles.php@ID=231 < prev    next >
Text File  |  2003-02-02  |  15KB  |  377 lines

  1. <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <html>
  3. <head>
  4.  <title>Krypta.cz - Webovß autorizace snadno a rychle</title>
  5.  <link rel="StyleSheet" href="server/main.css" type="text/css">
  6.  <link rel="SHORTCUT ICON" href="server/favicon.ico">
  7.  <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
  8.  <meta http-equiv="Cache-control" content="no-cache">
  9.  <meta http-equiv="Pragma" content="no-cache">
  10.  <meta http-equiv="Expires" content="0">
  11.  <meta name="robots" content="ALL,FOLLOW">
  12.  <meta http-equiv="Content-language" content="cs">
  13.  <meta name="description" content="Internetov² bezpeΦnostnφ portßl, zab²vajφcφ se kryptografiφ (Üifrovßnφm), ochranou dat, internetovou bezepeΦnostφ a poΦφtaΦov²mi viry">
  14.  <meta name="keywords" content="Üifrovßnφ cryptography pgp des aes rsa dss digital signatures pki linux free bezpeΦnost ochrana hacking cracking virus worm">
  15.  <meta name="copyright" content="Copyright (C) 2000-2002 Krypta.cz - <a href=mailto:michal.till@krypta.cz>Michal Till</a> a <a href=mailto:jan.kulveit@krypta.cz>Jan Kulveit</a>.">
  16.  <!-- No caching for this document.Trying to write to art231.html. ?> -->
  17.  
  18.  <!-- output.php -->
  19.  
  20.   <script language="JavaScript">
  21.   <!-- 
  22. //    if(top != self) { window.top.location.href=document.location; }  -->
  23.   </script>
  24.  
  25.  
  26. <!-- NAVRCHOLU.cz -->
  27. <script language="JavaScript" type="text/javascript">
  28. <!--
  29. pxDepth = screen.pixelDepth;
  30. if (!(pxDepth > 0))
  31.     pxDepth = screen.colorDepth;
  32. if (!(pxDepth > 0))
  33.     pxDepth = 0; 
  34. document.write("<img style=\"position:absolute; top:0px; left: 0px;\" src=\"../hit.navrcholu.cz/hit@id=00039669;n=1;screenx=" + screen.width + ";screeny=" + screen.height + ";cdepth=" + pxDepth + ";ref=" + escape(top.document.referrer) + "\" width=\"1\" height=\"1\" alt=\"\">");
  35. // -->
  36. </script>
  37. <noscript>
  38. <img style="position:absolute; top:0px; left: 0px;" src="../hit.navrcholu.cz/hit@id=00039669;n=1" width="1" height="1" alt="" border="0">
  39. </noscript>
  40. <!-- NAVRCHOLU.cz - konec -->
  41.  
  42. <STYLE Type=text/css>
  43.     BODY                { font-size:110%; background-color: #ffffff; color: #000000; margin: 0px;   background-image: url(images/backgr.gif); }
  44.  
  45.  
  46.  
  47.     .Copyright        { color: #000000; }
  48.     .Copyright A    { color: #000000; }
  49. </STYLE>
  50. </head>
  51. <SCRIPT>
  52. </SCRIPT><SCRIPT Src=charts.php@version=1621></SCRIPT><SCRIPT>
  53.  // Nalezeno  1 polozek. 
  54. var SectionTitles=new Array( "Webovß autorizace snadno a rychle" );
  55. var SectionURLs=new Array( "231" );
  56.  
  57. var BrothersNames = new Array("Webovß autorizace snadno a rychle","Nov² Φerv infikujφcφ MS SQL Servery zahlcuje internet","");
  58. var BrothersIDs = new Array("231","240","");
  59. //=====INFO======
  60. ItemName='Article231';
  61.  
  62. InIFrame='No';
  63. TableNum=2; 
  64. ItemID=231; 
  65. ArticleType='3'; 
  66. Action='articles'
  67. ItemTitle='Webovß autorizace snadno a rychle';
  68. ItemComment='Webovß autorizace snadno a rychle';
  69. TabName='Articles'
  70. Parent1Title='BezpeΦnost internetu' ;
  71. Parent2Title='BezpeΦnost a anonymita' ;
  72. Parent1ID='22' ;
  73. Parent2ID='9' ;
  74. ParentTitle='BezpeΦnost internetu' ;
  75. AuthorName='Michal Till' ;
  76. AuthorDesc='' ;
  77. AuthorEMail='Michal.Till@Seznam.cz' ;
  78. AuthorID='1' ;
  79. ItemDate='10.12.2002';
  80. Views='348' ;
  81. Average='2.00' ;
  82. Grade='2' ;
  83. NumVotes='0' ;
  84. SourceName='' ;
  85. SourceURL='' ;
  86. SourceLink='' ;
  87. Ref1URL='' ;
  88. Ref2URL='' ;
  89. Ref3URL='' ;
  90. Ref4URL='' ;
  91. Ref5URL='' ;
  92. Ref1Link='' ;
  93. Ref2Link='' ;
  94. Ref3Link='' ;
  95. Ref4Link='' ;
  96. Ref5Link='' ;
  97. Ref1Desc='' ;
  98. Ref2Desc='' ;
  99. Ref3Desc='' ;
  100. Ref4Desc='' ;
  101. Ref5Desc='' ;
  102. Possible=1 ;
  103. Answer1='' ;
  104. Answer2='' ;
  105. Answer3='' ;
  106. Answer4='' ;
  107. Answer5='' ;
  108. Num1='';
  109. Num2='';
  110. Num3='';
  111. Num4='';
  112. Num5='';
  113. Type= ''; //def
  114. WebName='Krypta.cz';
  115. //====ENDINFO======
  116.  
  117. </SCRIPT>
  118.  
  119. <BODY>
  120. </SCRIPT>
  121. <SCRIPT Language=JavaScript Src="server/startfeatures.php@Rand=ddd "> </SCRIPT><SCRIPT Language=JavaScript Src="server/features.php"> </SCRIPT><!-- Rozdeleni na sloupce -->
  122.  
  123. <TABLE cellspacing="0" cellpadding="0" border="0" width="100%">
  124. <tr>
  125.  
  126. <!-- Levy sloupec -->
  127.  
  128.  
  129.  
  130. <td  width="161" align="center" valign="top">
  131.  
  132. <img src=space.gif height=1 width=161>
  133. <SCRIPT SRC=server/left_js.php@version=1621></SCRIPT></td>
  134.  
  135. <!-- /Levy sloupec -->
  136.  
  137. <!-- Mezera 1-->
  138. <td width=13 bgcolor="#006792" ><img src="images/spacer.gif" width="13" height="1" border="0" alt=""></td>
  139. <!-- /Mezera 1-->
  140.  
  141. <!-- Mezera 2 -->
  142. <td width=1 bgcolor=#1063A5><img src="images/spacer.gif" width="1" height="1" border="0" alt=""></td>
  143. <!-- /Mezera 2-->
  144.  
  145. <!-- Mezera 3 -->
  146. <td width=10><img src="images/spacer.gif" width="10" height="1" border="0" alt=""></td>
  147. <!-- /Mezera 3-->
  148.  
  149.  
  150. <!-- Prostredni sloupec -->
  151. <td align="center" valign="top">
  152.  
  153. <!-- Hlavicka -->
  154. <!-- Horni lista s reklamou -->
  155.  
  156. <TABLE cellspacing="0" cellpadding="0" border="0" width="100%" class="hrlista">
  157. <tr>
  158.  
  159. <!-- Logo-->
  160. <td VAlign=Top>
  161. <a href="default.htm"><img src="images/logo.gif"  style="z-index:100;" vspace=0 cwidth="222" cheight="48" border="0" alt="Krypta.cz - Magazφn o informaΦnφ bezpeΦnosti"></a>
  162. </td>
  163. <!-- /Logo -->
  164.  
  165. <td align=center>
  166. </td></tr></table>
  167. <!-- /Horni lista s reklamou-->
  168. <!-- /Hlavicka -->
  169.  
  170. <TABLE Width=100% Border=0><TD><SCRIPT>
  171. </SCRIPT><SCRIPT>
  172. ArticleHead('Webovß autorizace snadno a rychle', 'Michal Till', 'Michal.Till@Seznam.cz', '10.12.2002', '23:04:37', 'Nßvod');
  173. Intro('Vzhledem k Φetn²m dotaz∙m vßm nabφzφme zajφmavou implementaci HTTP autorizace, kterß nezabere vφce ne₧ 2kb k≤du ale p°esto disponije vÜφm, co m∙₧ete pot°ebovat: fixovßnφ na IP adresu, Φasov² limit po kterΘm vyprÜφ atd...');
  174. ArticleBanner_smallres('margin-bottom:10px;margin-top:-3px;');
  175. </SCRIPT>
  176. <DIV Class=Article><SCRIPT>
  177. AuthorData();
  178. if (Type != 'Pure') if ((ArticleType!=19) && (ArticleType!=20)) ShowSections();
  179. ArticleBanner_bigres('margin-top:12px;margin-bottom:-3px;');
  180. </SCRIPT><FONT Size=2><DIV Align=Justify Class=Paragraph>
  181.     Mechanizmus byl navrhnut s cφlem poskytnout co nejjednoduÜÜφ, ale pln∞ pou₧iteln² k≤d, kter² by bylo velmi snadnΘ implementovat. Ke svΘ Φinnosti pot°ebuje tabulku <SPAN Class=CODE>users</SPAN>, ve kterΘ bude p°ihlaÜovacφ jmΘno ulo₧eno ve sloupci <SPAN Class=CODE>nick</SPAN> a heslo v <SPAN Class=CODE>password</SPAN>. Pro jednoduchost se hesla uklßdajφ do databßze v otev°enΘ podob∞, ovÜem dopsat k≤dovßnφ n∞kterou hashovacφ funkcφ je velmi jednoduchΘ. 
  182. </DIV></FONT></b></i>
  183. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  184.     Skript poskytuje n∞kolik funkcφ najednou. Pokud jsou zjiÜt∞ny neprßzdnΘ prom∞nnΘ z logovacφho formulß°e, systΘm se pokusφ u₧ivatele p°ihlßsit. Dßle je v k≤du vid∞t d∙le₧itß funkce, kterß mß na starosti generovßnφ autorizaΦnφch °et∞zc∙ a poslednφ Φßst provßnφ klasickou kontrolu stßvajφcφho spojenφ, tj. zda se n∞kdo nepokusil session ukrßst.
  185. </DIV></FONT></b></i>
  186. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  187.     K≤d umo₧≥uje jak fixaci spojenφ na jednu IP adresu, tak mo₧nost vyprÜenφ platnosti po urΦitΘm ΦasovΘm limitu. BezpeΦnost t∞chto funkcφ je zajiÜt∞na tajnostφ prom∞nnΘ <SPAN Class=CODE>$SecretCode</SPAN>. P°i jeho zkompromitovßnφ m∙₧e ·toΦnφk p°i znalosti hesla vytvß°et autorizaΦnφ °et∞zce k jakΘkoliv IP adrese a jakΘmukoliv Φasu.
  188. </DIV></FONT></b></i>
  189. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  190.     P°istupme nynφ k vlastnφmu zdrojovΘmu k≤du.
  191. </DIV></FONT></b></i>
  192. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  193.     <PRE><SPAN Class=CODE>// nejprve je potreba se pripojit do databaze
  194. include "connect.php";
  195. $SecretCode="thisisthecode";
  196. // Generovani autorizacniho retezce</SPAN></PRE>
  197. </DIV></FONT></b></i>
  198. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  199.     <PRE><SPAN Class=CODE>function AuthString($login, $password, $time=0) {
  200.     global $REMOTE_ADDR;
  201.     global $HTTP_USER_AGENT;
  202.     global $SecretCode;
  203.     // platnost session mozne nastavit k*10min
  204.     if ($time==0) $time=round(time()/(60*10)); 
  205.     return MD5( $login . $password . $REMOTE_ADDR . 
  206. $HTTP_USER_AGENT . $SecretCode . $time);
  207. }</SPAN></PRE>
  208. </DIV></FONT></b></i>
  209. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  210.     Prvnφ °ßdky p°edstavujφ inicializaci. V souboru <SPAN Class=CODE>connect.php</SPAN> se provede p°ipojenφ k databßzi, dßle se nastavφ tajn² °et∞zec, kter² si pochopiteln∞ p°i vlastnφ implementaci zm∞≥te. Nßsleduje funkce, kterß v zßvislosti na jmΘnu, heslu a ΦasovΘm ·daji vracφ autorizaΦnφ °et∞zec. Ten se spoΦφtß jako v²sledek jednocestnΘ hashovacφ funkce n∞kolika spojen²ch °et∞zc∙. <SPAN Class=CODE>$REMOTE_ADDR</SPAN> vracφ klientovu IP, <SPAN Class=CODE>$HTTP_USER_AGENT</SPAN> informace o prohlφ₧eΦi a operaΦnφm systΘmu (proΦ je nezahrnout..., bude to o n∞co bezpeΦn∞jÜφ).
  211. </DIV></FONT></b></i>
  212. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  213.     ╚asov² ·daj se bere v sekundßch od p∙lnoci 1. 1. 1970, tento ·daj se ale d∞lφ hodnotou 600 (tj. 10 min) a zaokrouhluje. ╚asov² limit funguje tak, ₧e se p°i kontrole platnosti °et∞zce testujφ t°φ vypoΦtenΘ: jeden pro aktußlnφ Φas a poslednφch 10 minut, jeden pro interval p°ed 10ti-20ti minutami a jeden pro Φas od 20ti minut zp∞t do p∙l hodiny. Tφm lze dΘlku limitu nastavit.
  214. </DIV></FONT></b></i>
  215. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  216.     <PRE><SPAN Class=CODE>if ((@$LogNick!="") && (@$LogPassword!="")) { // Prihlaseni
  217. // Vynulujeme promenne aplikace
  218. $Nick="";
  219. $AuthString="";
  220. // Zkusime se nalogovat
  221. @$GetUser = MySQL_Query("SELECT * FROM users WHERE nick LIKE '".AddSlashes($LogNick)."'");
  222. $User = MySQL_Fetch_Array($GetUser);
  223. // Uspech?
  224. if ($User["Password"]==$LogPassword) :
  225.     $Nick=$LogNick;
  226.     $AuthString=AuthString($LogNick,$LogPassword);
  227. else:
  228.     echo "Log FAILED.";
  229. endif;    
  230. // Posleme login name a autoritzacni retezec
  231. SetCookie("Nick",$LogNick);
  232. SetCookie("AuthString",$AuthString);
  233.     }</SPAN></PRE>
  234. </DIV></FONT></b></i>
  235. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  236.     Pokud jsou nenulovΘ prom∞nnΘ, ve kter²ch se p°edpoklßdajφ ·daje z formulß°e (<SPAN Class=CODE>$LogNick</SPAN> a <SPAN Class=CODE>$LogPassword</SPAN>) systΘm se pokusφ nalogovat. Nßsleduje kontrola aktußlnφho autorizaΦnφho °et∞zce, kterß se provßdφ v₧dy (v p°edchozφm p°φpad∞ by bylo mo₧no ji vynechat, ale tφmto se nic nepokazφ).
  237. </DIV></FONT></b></i>
  238. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  239.     <PRE><SPAN Class=CODE>// Testovani aktualniho nalogovani
  240. if ((@$Nick!="") && (@$AuthString!="")) { 
  241. @$GetUser = MySQL_Query("SELECT * FROM users WHERE nick LIKE '".AddSlashes($Nick)."'");
  242. $User=MySQL_Fetch_Array($GetUser);
  243. //ted otestujeme cas. limit na max 3*10 min
  244. if ( (AuthString($Nick, $User["password"])==@$AuthString) || 
  245.  (AuthString($Nick, $User["password"],round(time()/(60*10))-1)==@$AuthString) || 
  246.  (AuthString($Nick, $User["password"],round(time()/(60*10))-2)==@$AuthString) ):
  247.     // vse ok, posleme autorizacni retezec s novou casovou znamkou
  248.     $AuthString=AuthString($Nick,$User["password"]);
  249.     SetCookie("AuthString",$AuthString);    
  250.     echo $AuthString;
  251. else:
  252.     SetCookie("Nick","");
  253.     SetCookie("AuthString","");
  254.     Header("Location: login.php");
  255.     Die();
  256. endif;    
  257. }
  258. else //neni k dispozici autorizacni retezec
  259. {
  260.     Header("Location: login.php");
  261.     Die();
  262. }</SPAN></PRE>
  263. </DIV></FONT></b></i>
  264. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  265.     Zb²vß dodat, ₧e jeliko₧ je vÜe v jednom souboru, je mo₧nΘ se z logovacφho formulß°e odkazovat ihed na prvnφ strßnku aplikace. Pokud je skript sprßvn∞ vlo₧en jeÜt∞ p°ed jak²koliv v²stup (musφ b²t-jinak by se neposlaly cookies), provede se nalogovßnφ samo.
  266. </DIV></FONT></b></i>
  267. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  268.     DalÜφ vychytßvky si nechßme na p°φÜt∞. Knihovnu si m∙₧ete sßhnout <a href=material/tillda/security.php_>zde</a>.
  269.  
  270. </DIV></FONT></b></i>
  271. </DIV>
  272. <SCRIPT>
  273. TextEnd('')
  274. </SCRIPT><SCRIPT>
  275. o('<br>');
  276. hr('');
  277. o('<TABLE '+CP+' '+CS+' style=\'position:relative;top:-'+sw('7','9')+'px;z-index:5\' xAlign=left '+B+'><TR><TD width=10><img HEIGHT=18 WIDTH=14 src=images/downgreyleft.gif hspace=0 vspace=0 '+B+' align=right><TD bgcolor=#E0E0E0><SPAN Style="font-size:12px;color:#000000;font-family:Verdana, Arial, Sans-Serif;position:relative;top:-2px;">Souvisejφcφ člßnky</SPAN><TD width=10><img src=images/downgreyright.gif width=17 height=18  hspace=0 vspace=0 '+B+' '+AL+'></TABLE>');
  278. </SCRIPT><OL Class=None Type=Disc><LI style='margin-left:20px;' class=LinkItem><a href=articles.php@ID=32><SPAN Class=SeeAlso>BezpeΦnost a autorizace na WWW I. : protokol HTTP</SPAN></a><LI style='margin-left:20px;' class=LinkItem><a href=articles.php@ID=162><SPAN Class=SeeAlso>BezpeΦnostnφ nedostatky i na presti₧nφch zpravodajsk²ch webech z oblasti ICT</SPAN></a></OL><SCRIPT>
  279. nie('<br>');AdditionalTablesBegin();
  280.  
  281. CommentsBegin('Webovß autorizace snadno a rychle',2);
  282.  
  283. Comment('154','bezpecne?','Michal','0');
  284. Comment('155','   <IMG Src=images/sub.gif valign=top> Re: bezpecne?','Michal Till','1');
  285. CommentsEnd();
  286. </SCRIPT><SCRIPT>
  287. ArticleEnd()
  288. </SCRIPT></TABLE>
  289. <!-- /Prostredni sloupec -->
  290.  
  291.  
  292. <!-- Mezera 3 -->
  293.  
  294. <td width=5><img src="images/spacer.gif" width="5" height="1" border="0" alt=""></td>
  295. <!-- /Mezera 3-->
  296.  
  297. <!-- Mezera 2 -->
  298. <td width=1 bgcolor=#1063A5><img src="images/spacer.gif" width="1" height="1" border="0" alt=""></td>
  299. <!-- /Mezera 2-->
  300.  
  301. <!-- Mezera 1-->
  302. <td width=13 bgcolor="#006792" ><img src="images/spacer.gif" width="13" height="1" border="0" alt=""></td>
  303. <!-- /Mezera 1-->
  304.  
  305. <!-- Pravy sloupec -->
  306. <td bgcolor=#006792 width="0" align="center" valign="top">
  307. <SCRIPT SRC=server/right_js.php@version=1621></SCRIPT><br>
  308. </td>
  309. <!-- /Pravy sloupec -->
  310.  
  311.  
  312. </tr>
  313.  
  314. <!-- Bilo -->
  315. <tr>
  316. <td bgcolor=#000000><img src=space.gif height=1 width=1></td>
  317. <td bgcolor=#000000></td>
  318. <td bgcolor=#000000></td>
  319. <td bgcolor=#FFFFFF></td>
  320. <td bgcolor=#FFFFFF></td>
  321. <td bgcolor=#FFFFFF></td>
  322. <td colspan=5 bgcolor=#000000></td>
  323. </tr>
  324. <tr  bgcolor=#FFFFFF>
  325. <td><img src=space.gif height=20 width=1></td>
  326. <td></td>
  327. <td></td>
  328. <td></td>
  329. <td></td>
  330. <td></td>
  331. <td colspan=5></td>
  332. </tr>
  333. <!-- /Bilo-->
  334.  
  335.  
  336.  
  337. </table>
  338. <!-- /Rozdeleni na sloupce -->
  339.  
  340. <SCRIPT>
  341.     Exec(ToExecute);
  342.     ToExecute="";
  343. </SCRIPT>
  344.  
  345. <!-- Dolni lista -->
  346.  
  347.  
  348. <!-- Paticka -->
  349. <TABLE cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor=#ffffff>
  350. <TR><td colspan=5 align="center" bgcolor=#000000><img src=space.gif height=1 width=1></td></TR>
  351. <TR bgcolor=#f0f0f0>
  352. <td align="center">
  353. <IMG Src=images/logo2.gif hspace=10 vspace=5>
  354. </td>
  355. <td>
  356. <DIV Style="margin-top:4px;margin-bottom:4px;" Class=Copyright><FONT Face=Arial Size=1>
  357.  
  358. <b><u>Krypta.cz</u></b> -  Magazφn o informaΦnφ bezpeΦnosti.<br>
  359. Copyright (C) 2000-2002 Krypta.cz - <a href=mailto:michal.till@krypta.cz>Michal Till</a> a <a href=mailto:jan.kulveit@krypta.cz>Jan Kulveit</a>. VÜechna prßva vyhrazena. <br>
  360. Tento server dodr₧uje prßvnφ p°edpisy o ochran∞ osobnφch ·daj∙, vΦetn∞ standardu P3P (<a href=server/policy.xml>policy</a>). </FONT></DIV>
  361. </td>
  362. <td>
  363. <IMG Src=geronimo.gif hspace=10 vspace=5>
  364. </td>
  365. <td>
  366. <DIV Style="margin-top:4px;margin-bottom:4px;" Class=Copyright><FONT Face=Arial Size=1>
  367. RedakΦnφ systΘm Geronimo<br>
  368. Copyright (C) 2001-2002 <a href=mailto:michal.till@krypta.cz>Michal Till</a>
  369. </FONT></DIV>
  370. </td>
  371. </td></tr></table>
  372. <!-- Paticka -->
  373.  
  374. <!-- /Dolni lista -->
  375.  
  376. </body>
  377. </html>