PHP 7.2.0 nabízí nové hashování hesel Argon2

30. listopadu 2017 byla vydána nová verze PHP, konkrétně verze 7.2.0 . Jaké změny tato verze přináší můžeme vidět zde. Já bych se ale rád pozastavil u jedné konkrétní, ryze praktické věci.

Algoritmus Argon2i

Jedná se o nový algoritmus pro hashování hesel pomocí známe funkce password_hash. Jeho použití je snadné:

$password = 'ukrutně_silné_heslo';

$options = [
    'memory_cost' => PASSWORD_ARGON2_DEFAULT_MEMORY_COST,
    'time_cost' => PASSWORD_ARGON2_DEFAULT_TIME_COST,
    'threads' => PASSWORD_ARGON2_DEFAULT_THREADS,
];

$hash = password_hash($password, PASSWORD_ARGON2I, $options);

Odkaz na další zdroje k tématu

Více se můžete dočíst v níže uvedených zdrojích:

https://framework.zend.com/blog/2017-08-17-php72-argon2-hash-password.html
https://www.bleepingcomputer.com/news/security/php-adds-support-for-next-gen-password-hashing-algorithm-argon2/
https://www.zdrojak.cz/clanky/jake-novinky-prinese-php-7-2/
https://www.zdrojak.cz/clanky/zmena-hashovani-existujicich-hesel/

Publikováno 4.12.2017 v 11:25 | Kategorie: PHP

PHP: výpis PTR z DNS s více záznamy

V jednom ze starších příspěvků, který naleznete zde, jsem popisoval možnost, jak si v PHP vygenerovat tabulku s doménami, u kterých hromadně provedeme příkaz ping a posléze získáme i PTR (reverzní) záznamy z DNS. Co když ale chceme prověřit, zda IP adresa vrací více než jeden PTR záznam? Původní řešení vrátí totiž jen jeden.

Vlastní skript

Pojďme bez dalších okolků rovnou na věc, tedy na zdrojový kód. Nečekejte žádné sofistikované řešení, ale funkční to je. Řešení pro vrácení více PTR záznamů může vypadat tedy např. takto:

<html>
<body>
<table style="border-collapse:collapse;border:1px solid gray;width:100%;">
<tr><th>IP</th><th>PTR</th></tr>
<?php
 $names = file('ip.txt');
 foreach ($names as $name) {
 
 $ip = substr($name, 0, -1);

$ip2 = explode(".", $ip);
$ip2 = array_reverse($ip2);
$ip2 = implode(".", $ip2);
$ip2 = dns_get_record($ip2.".in-addr.arpa", DNS_PTR);
$tmp = [];
foreach($ip2 as $record) {
   if($record['type'] != 'PTR') continue;
   $tmp[] = $record['target'];
}

$ip2 = implode(", ", $tmp);

echo "<tr><td>$ip</td><td>$ip2</td></tr>";
 }
?>


</table>
</body>
<html>

Skript pracuje s textovým souborem, který je umístěň ve stejné adresářové úrovni a kde je jednoduše zapsán seznam IP adres.Tedy něco jako:

216.58.201.78
31.13.73.36
104.244.42.193
130.89.148.14
195.46.50.112

Spuštěný kód pak může vypadat nějak takto:

IP PTR

Publikováno 4.2.2017 v 19:00 | Kategorie: PHP

PHP: zobrazení RSS na stránkách

Narazil jsem na celkem pěkné řešení jak pomocí PHP skriptu zobrazovat na stránkách RSS z jiných webů.

Zdrojový kód

Řešení se skládá ze dvou souborů. Pojmenujme si je např. index.php a rssclass.php.

index.php

Obsah tohoto souboru by mohl vypadat např. takto:

<style>
.vas{
    float:left;
    width:270px;
    padding:10px;
}
.title-head {
    font-size:18px;
    font-weight:bold;
    text-align:left;
    background-color:#006699;
   color:#FFFFFF;
   padding:5px;}
.feeds-links {
    text-align:left;
    padding:5px;
    border:1px solid #dedede;
}
</style>
<div>
  <?php
  include('rssclass.php');
  $feedlist = new rss('http://www.zive.cz/rss/sc-47/default.aspx');
  echo $feedlist->display(3,"Živě");
 
  $feedlist = new rss('http://www.lupa.cz/rss/clanky/');
  echo $feedlist->display(3,"Lupa");
  ?>
</div>

rssclass.php

Zdrojový kód by tady mohl vypadat zase např. takto:

<?php
 class rss {
     var $feed;

  function rss($feed)
    {   $this->feed = $feed;  }
 
  function parse()
    {
    $rss = simplexml_load_file($this->feed);
   
    $rss_split = array();
    foreach ($rss->channel->item as $item) {
    $title = (string) $item->title; // Title
    $link   = (string) $item->link; // Url Link
    $description = (string) $item->description; //Description
    $rss_split[] = '<div>
        <a href="'
.$link.'" target="_blank" title="" >
            '
.$title.'
        </a><br />'
.$description.'
   <hr>
          </div>
'
;
    }
    return $rss_split;
  }
  function display($numrows,$head)
  {
    $rss_split = $this->parse();

    $i = 0;
    $rss_data = '<div class="vas">
           <div class="title-head">
         '
.$head.'
           </div>
         <div class="feeds-links">'
;
    while ( $i < $numrows )
   {
      $rss_data .= $rss_split[$i];
      $i++;
    }
    $trim = str_replace('', '',$this->feed);
    $user = str_replace('&lang=en-us&format=rss_200','',$trim);
    $rss_data.='</div></div>';
    return $rss_data;
  }
}
?>

Výsledek

Na výsledné stránce to pak může vypadat např. takto.

Publikováno 24.10.2015 v 02:48 | Kategorie: PHP