mirror of
				https://github.com/autistic-symposium/sec-pentesting-toolkit.git
				synced 2025-10-31 11:29:17 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			260 lines
		
	
	
	
		
			8.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			260 lines
		
	
	
	
		
			8.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Getting started with LAMP and CodeIgniter 
 | |
| 
 | |
| 
 | |
| LAMP is an acronym for a model of web service solution stacks: Linux, the Apache HTTP Server, the MySQL relational database management system, and the PHP programming language.
 | |
| 
 | |
| ## Building a MySQL Database
 | |
| 
 | |
| We will use a web interface to access data in our database:
 | |
| 
 | |
| * Login with your root login/password (set in the installation above): ```http://localhost/phpmyadmin```.
 | |
| The left-hand column contains a list of all of the databases you currently have.
 | |
| 
 | |
|  - mysql: contains information about the MySQL database server.
 | |
|  - information_schema: contains information about all of the other databases on your computer.
 | |
| 
 | |
| * In the Databases interface you are presented with a list of all of the databases.
 | |
| * Above that list there should be a form labeled “Create new database” with a text field.
 | |
| * Create tables within. Chose the types of your data. Every table should always have an id column (auto-incrementing integer, meaning that each new record will be automatically assigned an id value, starting at 1). You can do this by selecting A_I checkbox.
 | |
| * Add some data (using insert). The database is located at 
 | |
| ```/var/lib/mysql```.
 | |
| 
 | |
| ### MySQL Query Basis
 | |
| 
 | |
| Selecting items:
 | |
| ```
 | |
| Retrieve all of the records (* means columns):
 | |
| SELECT * FROM db_name;
 | |
| Select only some columns:
 | |
| SELECT col1, col2 FROM db_name;
 | |
| Select only some values from some column:
 | |
| SELECT * FROM db_name WHERE col1 = 'item';
 | |
| Select the first 10 items:
 | |
| SELECT * FROM cars WHERE make = 'Porsche' LIMIT 10
 | |
| ```
 | |
| 
 | |
| Inserting an item:
 | |
| ```
 | |
| INSERT INTO db_name (col1, col2, col3) VALUES ('item1', 'item2', 'item3')
 | |
| ```
 | |
| 
 | |
| Updating an item:
 | |
| ```
 | |
| UPDATE db_name SET col1 = 'item' WHERE col2 = 'item2' AND col3='item3'
 | |
| ```
 | |
| 
 | |
| Deleting items:
 | |
| ```
 | |
| DELETE db_name WHERE col1 = item"
 | |
| ```
 | |
| 
 | |
| ## PHP Basics
 | |
| 
 | |
| Variables:
 | |
| 
 | |
| ```
 | |
| <? php 
 | |
| $result = 4*8; 
 | |
| ?>
 | |
| Comments with / or ./* */.
 | |
| Print function:
 | |
| <? php
 | |
| echo "that's a print";
 | |
| ?>
 | |
| ```
 | |
| 
 | |
| Functions:
 | |
| ```
 | |
| <? php
 | |
| function print_this($name){
 | |
|  echo 'Print this ' . $name . '.';
 | |
|  return 'nice printing';
 | |
| }
 | |
| extra_print = print_this('aaaaa');
 | |
| print(extra_print);
 | |
| ?>
 | |
| ```
 | |
| 
 | |
| When a PHP file is accessed, all of its functions are initialized before any of the other lines of code are executed. As long as a function is defined in the same file, it can be called from anywhere within that file.
 | |
| 
 | |
| The scope of a variable refers to the domain within which it can be referenced. In PHP, any variables initialized and contained within a function itself are only available within that function.
 | |
| 
 | |
| ### Arrays
 | |
| 
 | |
| Creating an empty array:
 | |
| 
 | |
| ```
 | |
| <? php $new_array = array(); ?>
 | |
| ```
 | |
| 
 | |
| Adding elements:
 | |
| ```
 | |
| <? php $new_array[] = 1; $new_array[] = 5; ?>
 | |
| ```
 | |
| 
 | |
| Creating an array with values already:
 | |
| ```
 | |
| <? php $other_array = array(1,2,3); ?>
 | |
| ```
 | |
| 
 | |
| In PHP, arrays are like dictionaries:. If you add item likes above, it will increment from 0. You can also give the key:
 | |
| ```
 | |
| <? php $dictionary['dog'] = 1; ?> echo $dictionary['dog'];
 | |
| ```
 | |
| 
 | |
| Multi-arrays:
 | |
| 
 | |
| ```
 | |
| $cars = array
 | |
|  (
 | |
|  array("Volvo",22,18),
 | |
|  array("BMW",15,13),
 | |
|  array("Saab",5,2),
 | |
|  array("Land Rover",17,15)
 | |
|  );
 | |
| ```
 | |
| 
 | |
| Loop foreach:
 | |
| 
 | |
| ```
 | |
| <? php
 | |
| foreach ($array_number as $variable_representing_current_item){
 | |
| }
 | |
| ?>
 | |
| ```
 | |
| 
 | |
| Loop for:
 | |
| ```
 | |
| <?
 | |
| $other_array = []
 | |
| for ($i; $i<4; $i++){
 | |
| $other_array[] = $i;
 | |
| } ?>
 | |
| ```
 | |
| 
 | |
| ## The Model-View-Controller Pattern (MVC)
 | |
| 
 | |
| In a high level, the flow of a web app is:
 | |
| 
 | |
| * User request to view a certain page by typing a URL in the browser.
 | |
| * The app determines what needs to be displayed.
 | |
| * The data required for the page is requested and retrieved from the database.
 | |
| * The resulting data is used to render the page's display to the user.
 | |
| * The MVC structure is based on the presence of 3 main components: models, views, and controllers.
 | |
| 
 | |
| ### Models: Representing the Data Object
 | |
| 
 | |
| Responsible for communicating with the database. Composed of two parts:
 | |
| 
 | |
| * fields: Responsible for representing the various pieces of data within an object (the information within the database).
 | |
| * methods: Provide extra functionality within our models. Allow the manipulation of the model's initial information or perform additional actions related to the data.
 | |
| 
 | |
| ### Controllers: Workhorses
 | |
| 
 | |
| Determine what objects to retrieve and how to organize them.
 | |
| 
 | |
| Handle user request, retrieve proper information, and pass it to the proper view.
 | |
| 
 | |
| Different request is handled by different controller actions.
 | |
| 
 | |
| ### Views: What the User Sees
 | |
| 
 | |
| Responsible for the presentation layer, the actual visual display.
 | |
| 
 | |
| Each individual page within a web app has its own view.
 | |
| Views contain HTML code and PHP (if this is the backend language) to inject objects' information, passed to the view via a controller.
 | |
| 
 | |
| A simplified version of Facebook profile view:
 | |
| ```
 | |
| <section id="personal_info"> <?php // some code ?> </section> <section id="photos"> <?php // some code ?> </section>
 | |
| ```
 | |
| 
 | |
| ## Frameworks
 | |
| 
 | |
| The basis/foundation of your web app.
 | |
| 
 | |
| For PHP, we can download CodeIgniter, rename to our project name, copy it to the /var/www folder, and open it in the localhost/folder. We can modify the files for our app now.
 | |
| 
 | |
| If you get the 403 forbidden error, check the permissions and then type:
 | |
| ```
 | |
| restorecon -r /var/www/html
 | |
| ```
 | |
| (restorecon is used to reset the security context (type) (extended attributes) on one or more files).
 | |
| 
 | |
| The user guide can be seen at 
 | |
| ```http://localhost/APP_NAME/user_guide/```
 | |
| 
 | |
| ### CodeIgniter Basics
 | |
| 
 | |
| The system folder contains all of the inner-working.
 | |
| The application folder is where all the code specific to our app will live, include models, controllers, and view.
 | |
| 
 | |
| Controllers (```application/controllers/welcome.php```)
 | |
| The welcome class is inherent from the CI_Controller class.
 | |
| 
 | |
| An index refers to a main/default location.
 | |
| The index action is responsible for loading the view that renders the welcome message:
 | |
| public function index() { $this->load->view('welcome_message'); }
 | |
| In the case of controllers, each action is frequently associated with a URL.
 | |
| 
 | |
| The ```'welcomemessage'``` view is at ```applications/views/welcomemessage.php```.
 | |
| 
 | |
| ### Routes
 | |
| 
 | |
| The way that our web app knows where to direct our users, based on the URLs they enter, is by establishing routes. Routes are a mapping between URLs and specific controller actions.
 | |
| 
 | |
| We can configure routes at ```application/config/routes.php```:
 | |
| ```
 | |
| $route['desired-url-fragment'] = "controller-name/action-name”;
 | |
| ```
 | |
| Some routes work automatically: you can reference any controller action using the following URL format:
 | |
| ```http://localhost/APP_NAME/index.php/[controller-name]/[action-name]```
 | |
| 
 | |
| For example:
 | |
| ```http://localhost/APP_NAME/index.php/welcome/index/```
 | |
| 
 | |
| ### Configuring our app to use the Database
 | |
| 
 | |
| CI has built-in support for interacting with a database.
 | |
| In our application, the database configuration file is store at application/config/database.php
 | |
| 
 | |
| To connect our app to the MySQL database, update this file to:
 | |
| 
 | |
| ```
 | |
| $db['default']['hostname'] = 'localhost';
 | |
| $db['default']['username'] = 'root';
 | |
| $db['default']['password'] = '<your-root-password>';
 | |
| $db['default']['database'] = '<database-name-from-before';
 | |
| ```
 | |
| 
 | |
| To have access to the database functionality throughout the entire web app, auto-load the database library by changing the file ```application/config/autoload.php``` with:
 | |
| ```
 | |
| $autoload['libraries'] = array('template', 'database'); $autoload['libraries'] = array('database');
 | |
| Check if the page is still working fine 
 | |
| ($autoload['libraries'] = array('template', 'database'); does not work yet).
 | |
| ```
 | |
| 
 | |
| ### Models
 | |
| 
 | |
| Each model starts the same, as they intend to serve the same general function.
 | |
| 
 | |
| We create a new file in application/models folder named todomodel.php with the code:
 | |
| ```
 | |
| <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 
 | |
| class Todomodel extends CIModel {
 | |
| function _construct() {
 | |
| parent::_construct();
 | |
| } 
 | |
| ```
 | |
| 
 | |
| The second responsibility of models is to interact with our database. We need to implement a way for our todomodel to retrieve all of the todos in our database. We add a getallentries function bellow the constructor:
 | |
| ```
 | |
| function get_all_entries() { //$query = $this->db->get('todos'); $query = $this->db->order_by('order','ASC')->get('todos'); $results = array(); foreach ($query->result() as $result) { $results[] = $result; } return $results; }
 | |
| ```
 | |
| 
 | |
| In this snippet, we query our database by order, using ascending order.
 | |
| 
 | |
| 
 | |
| ---
 | |
| Enjoy! This article was originally posted [here](https://coderwall.com/p/5ltrxq/lamp-and-codeigniter).
 | |
| 
 | 
