README.md (31134B)
1 [](http://www.php-login.net) 2 3 # HUGE 4 5 [](https://scrutinizer-ci.com/g/panique/huge/?branch=master) 6 [](https://codeclimate.com/github/panique/huge) 7 [](https://travis-ci.org/panique/huge) 8 [](https://www.versioneye.com/user/projects/54ca11fbde7924f81a000010) 9 10 Just a simple user authentication solution inside a super-simple framework skeleton that works out-of-the-box 11 (and comes with an auto-installer), using the future-proof official bcrypt password hashing/salting implementation of 12 PHP 5.5+, plus some nice features that will speed up the time from idea to first usable prototype application 13 dramatically. Nothing more. This project has its focus on hardcore simplicity. Everything is as simple as possible, 14 made for smaller projects, typical agency work and quick pitch drafts. If you want to build massive corporate 15 applications with all the features modern frameworks have, then have a look at [Laravel](http://laravel.com), 16 [Symfony](http://symfony.com) or [Yii](http://www.yiiframework.com), but if you just want to quickly create something 17 that just works, then this script might be interesting for you. 18 19 HUGE's simple-as-possible architecture was inspired by several conference talks, slides and articles about huge 20 applications that - surprisingly and intentionally - go back to the basics of programming, using procedural programming, 21 static classes, extremely simple constructs, not-totally-DRY code etc. while keeping the code extremely readable 22 ([StackOverflow](http://www.dev-metal.com/architecture-stackoverflow/), Wikipedia, SoundCloud). 23 24 Some interesting Buzzwords in this context: [KISS](http://en.wikipedia.org/wiki/KISS_principle), 25 [YAGNI](http://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it), [Feature Creep](https://en.wikipedia.org/wiki/Feature_creep), 26 [Minimum viable product](https://en.wikipedia.org/wiki/Minimum_viable_product). 27 28 #### Current releases 29 30 * stable [v3.1](https://github.com/panique/huge/releases/tag/v3.1), 31 * public beta branch: [master-branch](https://github.com/panique/huge) 32 * public in-development branch (please commit new code here): [develop](https://github.com/panique/huge/tree/develop) 33 34 #### Quick-Index 35 36 + [Features](#features) 37 + [Live-Demo](#live-demo) 38 + [Support](#support) 39 + [Follow the project](#follow) 40 + [License](#license) 41 + [Requirements](#requirements) 42 + [Auto-Installation](#auto-installation) 43 - [Auto-Installation in Vagrant](#auto-installation-vagrant) (also useful for 100% reproducible installation of HUGE) 44 - [Auto-Installation in Ubuntu 14.04 LTS server](#auto-installation-ubuntu) 45 + [Installation (Ubuntu 14.04 LTS)](#installation) 46 - [Quick Installation](#quick-installation) 47 - [Detailed Installation](#detailed-installation) 48 - [NGINX setup](#nginx-setup) 49 + [Documentation](#documentation) 50 + [Community-provided features & feature discussions](#community) 51 + [Potential features for the future (or your forks)](#future) 52 + [Why is there no support forum anymore ?](#why-no-support-forum) 53 + [Zero tolerance for idiots, trolls and vandals](#zero-tolerance) 54 + [Contribute](#contribute) 55 + [Code-Quality scanner links](#code-quality) 56 + [Report a bug](#bug-report) 57 58 ### The History of HUGE 59 60 Back in 2010/2011 there were no useful login solutions in the PHP world, at least not for non-experts. So I did the worst 61 mistake every young developer does: Trying to build something by myself without having any clue about security basics. 62 What made it even worse was: The web was (and is) full of totally broken tutorials about building user authentication 63 systems, even the biggest companies in the world did this completely wrong (we are talking about SONY, LinkedIn and 64 Adobe here), and also lots of major framework in all big programming languages (!) used totally outdated and insecure 65 password saving technologies. 66 67 However, in 2012 security expert [Anthony Ferrara](https://github.com/ircmaxell) published a [little PHP library](https://github.com/ircmaxell/password_compat), 68 allowing extremely secure, modern and correct hashing of passwords in PHP 5.3 and 5.4, usable by every developer without any stress and without any knowledge 69 about security internals. The script was so awesome that it was written into the core of PHP 5.5, it's the de-facto standard these days. 70 71 When this came out I tried to use this naked library to build a fully working out-of-the-box login system for several private and commercial projects, 72 and put the code on GitHub. Lots of people found this useful, contributed and bugfixed the project, made forks, smaller and larger versions. 73 The result is this project. 74 75 Please note: Now, in 2015, most major frameworks have excellent user authentication logic embedded by default. This was 76 not the case years ago. So, from today's perspective it might be smarter to chose Laravel, Yii or Symfony for serious 77 projects. But feel free to try out HUGE, the auto-installer will spin up a fully working installation within minutes and 78 without any configuration. 79 80 And why the name "HUGE" ? It's a nice combination to 81 [TINY](https://github.com/panique/tiny), 82 [MINI](https://github.com/panique/mini) and 83 [MINI2](https://github.com/panique/mini2), some of my other older projects. :) 84 85 ### Features <a name="features"></a> 86 * built with the official PHP password hashing functions, fitting the most modern password hashing/salting web standards 87 * proper security features, like CSRF blocking (via form tokens), encryption of cookie contents etc. 88 * users can register, login, logout (with username, email, password) 89 * password-forget / reset 90 * remember-me (login via cookie) 91 * account verification via mail 92 * captcha 93 * failed-login-throttling 94 * user profiles 95 * account upgrade / downgrade 96 * simple user types (type 1, type 2, admin) 97 * supports local avatars and remote Gravatars 98 * supports native mail and SMTP sending (via PHPMailer and other tools) 99 * uses PDO for database access for sure, has nice DatabaseFactory (in case your project goes big) 100 * uses URL rewriting ("beautiful URLs") 101 * proper split of application and public files (requests only go into /public) 102 * uses Composer to load external dependencies (PHPMailer, Captcha-Generator, etc.) for sure 103 * fits PSR-0/1/2/4 coding guidelines 104 * uses [Post-Redirect-Get pattern](https://en.wikipedia.org/wiki/Post/Redirect/Get) for nice application flow 105 * masses of comments 106 * is actively developed, maintained and bug-fixed 107 108 ### Planned features 109 110 * A real documentation (currently there's none, but the code is well commented) 111 112 ### Live-Demo <a name="live-demo"></a> 113 114 See a [live demo of older 3.0 version here](http://demo-huge.php-login.net) and [the server's phpinfo() here](http://demo-huge.php-login.net/info.php). 115 116 ### Support the project <a name="support"></a> 117 118 There is a lot of work behind this project. I might save you hundreds, maybe thousands of hours of work (calculate that 119 in developer costs). So when you are earning money by using HUGE, be fair and give something back to open-source. 120 HUGE is totally free to private and commercial use. 121 122 [](https://affiliates.host1plus.com/ref/devmetal/36f4d828.html) 123 124 Support the project by renting a server at [Host1Plus](https://affiliates.host1plus.com/ref/devmetal/36f4d828.html) or 125 or [DigitalOcean](https://www.digitalocean.com/?refcode=40d978532a20). Thanks! :) 126 127 Also feel free to contribute to this project. 128 129 ### License <a name="license"></a> 130 131 Licensed under [MIT](http://www.opensource.org/licenses/mit-license.php). 132 Totally free for private or commercial projects. 133 134 ### Requirements <a name="requirements"></a> 135 136 Make sure you know the basics of object-oriented programming and MVC, are able to use the command line and have 137 used Composer before. This script is not for beginners. 138 139 * **PHP 5.5+** 140 * **MySQL 5** database (better use versions 5.5+ as very old versions have a [PDO injection bug](http://stackoverflow.com/q/134099/1114320) 141 * installed PHP extensions: pdo, gd, openssl (the install guideline shows how to do) 142 * installed tools on your server: git, curl, composer (the install guideline shows how to do) 143 * for professional mail sending: an SMTP account (I use [SMTP2GO](http://www.smtp2go.com/?s=devmetal)) 144 * activated mod_rewrite on your server (the install guideline shows how to do) 145 146 ### Auto-Installations <a name="auto-installation"></a> 147 148 Yo, fully automatic. Why ? Because I always hated it to spend days trying to find out how to install a thing. 149 This will save you masses of time and nerves. Donate a coffee if you like it. 150 151 #### Auto-Installation (in Vagrant) <a name="auto-installation-vagrant"></a> 152 153 If you are using Vagrant for your development, then simply 154 155 1. Add the official Ubuntu 14.04 LTS box to your Vagrant: `vagrant box add ubuntu/trusty64` 156 2. Move *Vagrantfile* and *bootstrap.sh* (from *_one-click-installation* folder) to a folder where you want to initialize your project. 157 3. Do `vagrant up` in that folder. 158 159 5 minutes later you'll have a fully installed HUGE inside Ubuntu 14.04 LTS. The full code will be auto-synced with 160 the current folder. MySQL root password and the PHPMyAdmin root password are set to *12345678*. By default 161 192.168.33.111 is the IP of your new box. 162 163 #### Auto-Installation in a naked Ubuntu 14.04 LTS server <a name="auto-installation-ubuntu"></a> 164 165 Extremely simple installation in a fresh and naked typical Ubuntu 14.04 LTS server: 166 167 Download the installer script 168 ```bash 169 wget https://raw.githubusercontent.com/panique/huge/master/_one-click-installation/bootstrap.sh 170 ``` 171 172 Make it executable 173 ```bash 174 chmod +x bootstrap.sh 175 ``` 176 177 Run it! Give it some minutes to perform all the tasks. And yes, you can thank me later :) 178 ```bash 179 sudo ./bootstrap.sh 180 ``` 181 ### Installation <a name="installation"></a> 182 183 This script is very fresh, so the install guidelines are not perfect yet. 184 185 #### Quick guide: <a name="quick-installation"></a> 186 187 0. Make sure you have Apache, PHP, MySQL installed. [Tutorial](http://www.dev-metal.com/installsetup-basic-lamp-stack-linux-apache-mysql-php-ubuntu-14-04-lts/). 188 1. Clone the repo to a folder on your server 189 2. Activate mod_rewrite, route all traffic to application's /public folder. [Tutorial](http://www.dev-metal.com/enable-mod_rewrite-ubuntu-14-04-lts/). 190 3. Edit application/config: Set your database credentials 191 4. Execute SQL statements from application/_installation to setup database tables 192 5. [Install Composer](http://www.dev-metal.com/install-update-composer-windows-7-ubuntu-debian-centos/), 193 run `Composer install` on application's root folder to install dependencies 194 6. Make avatar folder (application/public/avatars) writable 195 7. For proper email usage: Set SMTP credentials in config file, set EMAIL_USE_SMTP to true 196 197 "Email does not work" ? See the troubleshooting below. TODO 198 199 #### Detailed guide (Ubuntu 14.04 LTS): <a name="detailed-installation"></a> 200 201 This is just a quick guideline for easy setup of a development environment! 202 203 Make sure you have Apache, PHP 5.5+ and MySQL installed. [Tutorial here](http://www.dev-metal.com/installsetup-basic-lamp-stack-linux-apache-mysql-php-ubuntu-14-04-lts/). 204 Nginx will work for sure too, but no install guidelines are available yet. 205 206 Edit vhost to make clean URLs possible and route all traffic to /public folder of your project: 207 ```bash 208 sudo nano /etc/apache2/sites-available/000-default.conf 209 ``` 210 211 and make the file look like 212 ``` 213 <VirtualHost *:80> 214 DocumentRoot "/var/www/html/public" 215 <Directory "/var/www/html/public"> 216 AllowOverride All 217 Require all granted 218 </Directory> 219 </VirtualHost> 220 ``` 221 222 Enable mod_rewrite and restart apache. 223 ```bash 224 sudo a2enmod rewrite 225 service apache2 restart 226 ``` 227 228 Install curl (needed to use git), openssl (needed to clone from GitHub, as github is https only), 229 PHP GD, the graphic lib (we create captchas and avatars), and git. 230 ```bash 231 sudo apt-get -y install curl 232 sudo apt-get -y install php5-curl 233 sudo apt-get -y install openssl 234 sudo apt-get -y install php5-gd 235 sudo apt-get -y install git 236 ``` 237 238 git clone HUGE 239 ```bash 240 sudo git clone https://github.com/panique/huge "/var/www/html" 241 ``` 242 243 Install Composer 244 ```bash 245 curl -s https://getcomposer.org/installer | php 246 mv composer.phar /usr/local/bin/composer 247 ``` 248 249 Go to project folder, load Composer packages (--dev is optional, you know the deal) 250 ```bash 251 cd /var/www/html 252 composer install --dev 253 ``` 254 255 Execute the SQL statements. Via phpmyadmin or via the command line for example. 12345678 is the example password. 256 Note that this is written without a space. 257 ```bash 258 sudo mysql -h "localhost" -u "root" "-p12345678" < "/var/www/html/application/_installation/01-create-database.sql" 259 sudo mysql -h "localhost" -u "root" "-p12345678" < "/var/www/html/application/_installation/02-create-table-users.sql" 260 sudo mysql -h "localhost" -u "root" "-p12345678" < "/var/www/html/application/_installation/03-create-table-notes.sql" 261 ``` 262 263 Make avatar folder writable 264 ```bash 265 sudo chmod 0777 -R "/var/www/html/public/avatars" 266 ``` 267 268 Remove Apache's default demo file 269 ```bash 270 sudo rm "/var/www/html/index.html" 271 ``` 272 273 Edit the application's config in application/config.development.php and put in your database credentials. 274 275 Last part (not needed for a first test): Set your SMTP credentials in the same file and set EMAIL_USE_SMTP to true, so 276 you can send proper emails. It's highly recommended to use SMTP for mail sending! Native sending via PHP's mail() will 277 not work in nearly every case (spam blocking). I use [SMTP2GO](http://www.smtp2go.com/?s=devmetal). 278 279 Then check your server's IP / domain. Everything should work fine. 280 281 #### NGINX setup: <a name="nginx-setup"></a> 282 283 This is an untested NGINX setup. Please comment [on the ticket](https://github.com/panique/huge/issues/622) if you see 284 issues. 285 286 ``` 287 server { 288 # your listening port 289 listen 80; 290 291 # your server name 292 server_name example.com; 293 294 # your path to access log files 295 access_log /srv/www/example.com/logs/access.log; 296 error_log /srv/www/example.com/logs/error.log; 297 298 # your root 299 root /srv/www/example.com/public_html; 300 301 # huge 302 index index.php; 303 304 # huge 305 location / { 306 try_files $uri /index.php?url=$uri&$args; 307 } 308 309 # your PHP config 310 location ~ \.php$ { 311 try_files $uri = 401; 312 include /etc/nginx/fastcgi_params; 313 fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket; 314 fastcgi_index index.php; 315 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 316 } 317 } 318 ``` 319 320 #### Testing with demo users 321 322 By default there are two demo users, a normal user and an admin user. For more info on that please have a look on the 323 user role part of the small documentation block inside this readme. 324 325 Normal user: Username is `demo2`, password is `12345678`. The user is already activated. 326 Admin user (can delete and suspend other users): Username is `demo`, password is `12345678`. The user is already activated. 327 328 ### What the hell are .travis.yml, .scrutinizer.yml etc. ? 329 330 There are several files in the root folder of the project that might be irritating: 331 332 - *.htaccess* (optionally) routes all traffic to /public/index.php! If you installed this project correctly, then this 333 file is not necessary, but as lots of people have problems setting up the vhost correctly, .htaccess it still there 334 to increase security, even on partly-broken-installations. 335 - *.scrutinizer.yml* (can be deleted): Configs for the external code quality analyzer Scrutinizer, just used here on 336 GitHub, you don't need this for your project. 337 - *.travis.yml* (can be deleted): Same like above. Travis is an external service that creates installations of this 338 repo after each code change to make sure everything runs fine. Also runs the unit tests. You don't need this inside 339 your project. 340 - *composer.json* (important): You should know what this does. ;) This file says what external dependencies are used. 341 - *travis-ci-apache* (can be deleted): Config file for Travis, see above, so Travis knows how to setup the Apache. 342 343 *README* and *CHANGELOG* are self-explaining. 344 345 ### Documentation <a name="documentation"></a> 346 347 A real documentation is in the making. Until then, please have a look at the code and use your IDE's code completion 348 features to get an idea how things work, it's quite obvious when you look at the controller files, the model files and 349 how data is shown in the view files. A big sorry that there's no documentation yet, but time is rare :) 350 351 - TODO: Full documentation 352 - TODO: Basic examples on how to do things 353 354 #### The different user roles 355 356 Currently there are two types of users: Normal users and admins. There are exactly the same, but... 357 358 1. Admin users can delete and suspend other users, they have an additional button "admin" in the navigation. Admin users 359 have a value of `7` inside the database table field `user_account_type`. They cannot upgrade or downgrade their accounts 360 (as this wouldn't make sense). 361 362 2. Normal users don't have admin features for sure. But they can upgrade and downgrade their accounts (try it out via 363 /login/changeUserRole), which is basically a super-simple implementation of the basic-user / premium-user concept. 364 Normal users have a value of `1` or `2` inside the database table field `user_account_type`. By default all new 365 registered users are normal users with user role 1 for sure. 366 367 See the "Testing with demo users" section of this readme for more info. 368 369 #### An introduction into the CSRF features 370 371 To prevent [CSRF attacks](https://en.wikipedia.org/wiki/Cross-site_request_forgery), HUGE does this in the most common 372 way, by using a security *token* when the user submits critical forms. This means: When PHP renders a form for the user, 373 the application puts a "random string" inside the form (as a hidden input field), generated via Csrf::makeToken() 374 (application/core/Csrf.php), which also saves this token to the session. When the form is submitted, the application 375 checks if the POST request contains exactly the form token that is inside the session. 376 377 This CSRF prevention feature is currently implemented on the login form process (see *application/view/login/index.php*) 378 and user name change form process (see *application/view/login/editUsername.php*), most other forms are not security- 379 critical and should stay as simple as possible. 380 381 A big thanks to OmarElGabry for implementing this! 382 383 #### Troubleshooting & Glitches 384 385 * In 3.0 and 3.1 a user could log into the application from different devices / browsers / locations. This was intended 386 behaviour as this is standard in most web applications these days. In 3.2 still feature is "missing" by default, a 387 user will only be able to log in from one browser at the same time. This is a security improvement, but for sure not 388 optimal for many developers. The plan is to implement a config switch that will allow / disallow logins from multiple 389 browsers. 390 * Using this on a sub-domain ? You might get problems with the cookies in IE11. Fix this by replacing "/" with "./" of 391 the cookie location COOKIE_PATH inside application/config/config.xxx.php! 392 Check [ticket #733](https://github.com/panique/huge/issues/733) for more info. Thanks to jahbiuabft for figuring this 393 out. Update: There's another ticket focusing on the same issue: [ticket #681](https://github.com/panique/huge/issues/681) 394 395 ### Community-provided features & feature discussions <a name="community"></a> 396 397 There are some awesome features or feature ideas build by awesome people, but these features are too special-interest 398 to go into the main version of HUGE, but have a look into these tickets if you are interested: 399 400 - [Caching system](https://github.com/panique/huge/issues/643) 401 - [ReCaptcha as captcha](https://github.com/panique/huge/issues/665) 402 - [Internationalization feature](https://github.com/panique/huge/issues/582) 403 - [Using controller A inside controller B](https://github.com/panique/huge/issues/706) 404 - [HTML mails](https://github.com/panique/huge/issues/738) 405 406 ### Future of the project: As simple as possible! <a name="future"></a> 407 408 The idea of this project was to provide a super-simple barebone application with a full user authentication 409 system inside. For future development it might be cool to avoid feature hell and overbloated code, so please let's keep 410 this project simple, clean and minimal with these few "rules" (and more on this inside this ticket: 411 [Keep the project as simple as possible](https://github.com/panique/huge/issues/664).): 412 413 1. Reduce features to the bare minimum. 414 2. Don't implement features that are not needed by most users. 415 3. Only build everything for the most common use case (like MySQL, not PostGre, NoSQL etc). 416 417 #### List of feature ideas 418 419 Open-source is a great thing, and projects live from community-contributed feature for sure. As this project is highly 420 security-related and mainly just a free-time one-man show, new features mean a lot of work, reviewing, testing, 421 corrections, and making sure it runs perfectly in every possible scenario. As I simply don't have the time to do this, 422 I would kindly ask you **not** to commit new features when they are not really basic, very small and well-written, 423 and if you miss a feature, then please try to write this on your own and commit it to the project. 424 425 To avoid unnecessary work for all of us I would kindly recommend everybody to use HUGE for simple project that only 426 need the features that already exist, and if you really need a RESTful architecture, migrations, routing, 2FA etc, 427 then it's easier, cleaner and faster to simply use Laravel, Symfony or Zend. 428 429 However, here are the community-suggested possible features, taken from lots of tickets. Feel free to implement them 430 into your forks of the project: 431 432 * OAuth2 implementation (let your users create accounts and login via 3rd party auth, like Facebook, Twitter, GitHub, 433 etc). As this is a lot of work and would make the project much more complicated it might make sense to do this in a 434 fork or totally skip it. (see [Ticket #528](https://github.com/panique/huge/issues/528)) 435 * Router (map all URLs to according controller-methods inside one file), [Ticket 727](https://github.com/panique/huge/issues/727) 436 * RESTful architecture (see [ticket #488](https://github.com/panique/huge/issues/488) for discussion) 437 * Horizontal MySQL scaling (see [ticket #423](https://github.com/panique/huge/issues/423) for discussion) 438 * Modules / middleware 439 * Logging 440 * Two-Factor-Authentication (see [ticket #732](https://github.com/panique/huge/issues/732)) 441 * Controller-less URLs (see [ticket #704](https://github.com/panique/huge/issues/704)) 442 * Email-re-validation after email change (see [ticket #705](https://github.com/panique/huge/issues/705)) 443 * Connect to multiple databases (see [ticket #702](https://github.com/panique/huge/issues/702)) 444 * A deeper user role system (see [ticket #701](https://github.com/panique/huge/issues/701), 445 [pull-request #691](https://github.com/panique/huge/pull/691)), 446 [ticket #603](https://github.com/panique/huge/issues/603) 447 448 ### Why is there no support forum (anymore) ? <a name="why-no-support-forum"></a> 449 450 There were two (!) support forums for v1 and v2 of this project (HUGE is v3), and both were vandalized by people who 451 didn't even read the readme and / or the install guidelines. Most asked question was "script does not work plz help" 452 without giving any useful information (like code or server setup or even the version used). While I'm writing these 453 lines somebody just asked via Twitter "how to install without Composer". You know what I mean :) - 99% of the questions 454 were not necessary if the people would had read the guidelines, do a minimal research on their own or would stop making 455 things so unnecessarily complicated. And even when writing detailed answers most of them still messed it up, resulting 456 in rants and complaints (for free support for a free software!). It was just frustrating to deal with this every day, 457 especially when people take it for totally granted that *it's the duty* of open-source developers to give detailed, 458 free and personal support for every "plz help"-request. 459 460 So I decided to completely stop any free support. For serious questions about real problems inside the script please 461 use the GitHub issues feature. 462 463 ### Zero tolerance for idiots, trolls and vandals! <a name="zero-tolerance"></a> 464 465 Harsh words, but as basically every public internet project gets harassed, vandalized and trolled these days by very 466 strange people it's necessary: Some simple rules. 467 468 1. Respect that this is just a simple script written by unpaid volunteers in their free-time. 469 This is NOT business-software you've bought for $10.000. 470 There's no reason to complain (!) about free open-source software. The attitude against free software 471 is really frustrating these days, people take everything for granted without realizing the work behind it, and the 472 fact that they get serious software totally for free, saving thousands of dollars. If you don't like it, then don't 473 use it. If you want a feature, try to take part in the process, maybe even build it by yourself and add it to the 474 project! Be nice and respectful. Constructive criticism is for sure always welcome! 475 476 2. Don't bash, don't hate, don't spam, don't vandalize. Please don't ask for personal free support, don't ask if 477 somebody could do your work for you. Before you ask something, make sure you've read the README, followed every 478 tutorial, double-checked the code and tried to solve the problem by yourself. 479 480 Trolls and very annoying people will get a permanent ban / block. GitHub has a very powerful anti-abuse team. 481 482 ### Contribute <a name="contribute"></a> 483 484 Please commit only in *develop* branch. The *master* branch will always contain the stable version. 485 486 ### Code-Quality scanner links <a name="code-quality"></a> 487 488 [Scrutinizer (master branch)](https://scrutinizer-ci.com/g/panique/huge/?branch=master), 489 [Scrutinizer (develop branch)](https://scrutinizer-ci.com/g/panique/huge/?branch=develop), 490 [Code Climate](https://codeclimate.com/github/panique/huge), 491 [Codacy](https://www.codacy.com/public/panique/phplogin/dashboard?bid=789836), 492 [SensioLabs Insight](https://insight.sensiolabs.com/projects/d4f4e3c0-1445-4245-8cb2-d75026c11fa7/analyses/2). 493 494 ### Found a bug (Responsible Disclosure) ? <a name="bug-report"></a> 495 496 Due to the possible consequences when publishing a bug on a public open-source project I'd kindly ask you to send really 497 big bugs to my email address, not posting this here. If the bug is not interesting for attackers: Feel free to create 498 an normal GitHub issue. 499 500 ### Current and further development 501 502 See active issues and requested features here: 503 https://github.com/panique/huge/issues?state=open 504 505 ### Why you should use a favicon.ico in your project :) 506 507 Interesting issue: When a user hits your website, the user's browser will also request one or more (!) favicons 508 (different sizes). If these static files don't exist, your application will start to generate a 404 response and a 404 509 page for each file. This wastes a lot of server power and is also useless, therefore make sure you always have favicons 510 or handle this from Apache/nginx level. 511 512 HUGE tries to handle this by sending an empty image in the head of the view/_templates/header.php ! 513 514 More inside this ticket: [Return proper 404 for missing favicon.ico, missing images etc.](https://github.com/panique/huge/issues/530) 515 516 More here on Stackflow: [How to prevent favicon.ico requests?](http://stackoverflow.com/questions/1321878/how-to-prevent-favicon-ico-requests), 517 [Isn't it silly that a tiny favicon requires yet another HTTP request? How to make favicon go into a sprite?](http://stackoverflow.com/questions/5199902/isnt-it-silly-that-a-tiny-favicon-requires-yet-another-http-request-how-to-mak?lq=1). 518 519 ### Useful links 520 521 - [How to use PDO](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers) 522 - [A short guideline on how to use the PHP 5.5 password hashing functions and its PHP 5.3 & 5.4 implementations](http://www.dev-metal.com/use-php-5-5-password-hashing-functions/) 523 - [How to setup latest version of PHP 5.5 on Ubuntu 12.04 LTS](http://www.dev-metal.com/how-to-setup-latest-version-of-php-5-5-on-ubuntu-12-04-lts/) 524 - [How to setup latest version of PHP 5.5 on Debian Wheezy 7.0/7.1 (and how to fix the GPG key error)](http://www.dev-metal.com/setup-latest-version-php-5-5-debian-wheezy-7-07-1-fix-gpg-key-error/) 525 - [Notes on password & hashing salting in upcoming PHP versions (PHP 5.5.x & 5.6 etc.)](https://github.com/panique/huge/wiki/Notes-on-password-&-hashing-salting-in-upcoming-PHP-versions-%28PHP-5.5.x-&-5.6-etc.%29) 526 - [Some basic "benchmarks" of all PHP hash/salt algorithms](https://github.com/panique/huge/wiki/Which-hashing-&-salting-algorithm-should-be-used-%3F) 527 - [How to prevent PHP sessions being shared between different apache vhosts / different applications](http://www.dev-metal.com/prevent-php-sessions-shared-different-apache-vhosts-different-applications/) 528 529 ## Interesting links regarding user authentication and application security 530 531 - [interesting article about password resets (by Troy Hunt, security expert)](http://www.troyhunt.com/2012/05/everything-you-ever-wanted-to-know.html) 532 - Password-Free Email Logins: [Ticket & discussion](https://github.com/panique/huge/issues/674), [article](http://techcrunch.com/2015/06/30/blogging-site-medium-rolls-out-password-free-email-logins/?ref=webdesignernews.com) 533 - Logging in via QR code: [Ticket & discussion](https://github.com/panique/huge/issues/290), [english article](https://www.grc.com/sqrl/sqrl.htm), 534 [german article](http://www.phpgangsta.de/sesam-oeffne-dich-sicher-einloggen-im-internetcafe), 535 [repo](https://github.com/PHPGangsta/Sesame), [live-demo](http://sesame.phpgangsta.de/). Big thanks to *PHPGangsta* for writing this! 536 537 ### Side-facts 538 539 1. Weird! When I renamed php-login to HUGE (to get rid off the too generic project name and to make it fitting nicely 540 to MINI, TINY and MINI2, my other projects) I had a research if the word "huge" is already used in the php world for 541 sure. Nothing came up. Then, weeks later, I stumbled upon this: https://github.com/ffremont/HugeRest 542 I nice little framework in PHP, but it has only 1 star on Github, so it's obviously not so widely used. Looks very 543 professional, too. Hmm.... The guy behind published the entire readme etc. in pure french (!), so it's hard to use 544 for non-french-speaking people. However, I'm not related to him in any way, this is pure coincidence. 545 546 ### My blog 547 548 I'm also blogging at **[Dev Metal](http://www.dev-metal.com)**, have a visit if you like. Mostly PHP stuff, conference 549 talks and general IT issues.