Skip to main content

Security for CodeIgniter 3



Input Validation & Sanitisation

  • Always use CI3's Form Validation library before processing any user input.

  • Never use $_GET, $_POST, or $_REQUEST directly. Always go through $this->input.

  • Always prevent XSS (Cross-Site Scripting) by using $this->security->xss_clean() for other texts not part of the form.

    • Enabling global_xss_filtering in the config may break binary/JSON POST bodies. For APIs, handle XSS manually per field.

Cross-Site Request Forgery (CSRF)

  • Enable CSRF protection globally in config.php.

  • Always use echo form_open(); since it automatically adds the CSRF token value.

  • If you can't, then include <?= $this->security->get_csrf_token_name() ?> in every form (eg: ajax).

SQL Injection Prevention

  • NEVER concatenate user input into raw SQL. Avoid $this->db->query() with raw user input.

  • Always use CI3's Query Builder or prepared statements with bindings.


File Upload Security

  • Use CI3's Upload library. Do not use move_uploaded_file() directly.

  • Whitelist allowed MIME types and extensions explicitly.

  • Store uploads outside the application/ and system/ folders.

  • Rename the file on save. Never keep the original filename.

  • Add .htaccess in your uploads/ folder to block code execution of uploaded files. Do not put inside global .htaccess.

JWT Token for API

  • CI3 has no built-in JWT. Use firebase/php-jwt via Composer.

  • Create a JWT_helper or dedicated library.


  • Validate token on every API request in a base API controller except login

General Reminders

  • Secret Management

    • Store all secrets (JWT_SECRET, APP_ENCRYPTION_KEY, HMAC_SECRET) in .env or server environment. 

    • Do not hardcode and never commit.


  • Base/Site URLs

    • Keep $config['base_url'] correct and $config['index_page'] to '' when using .htaccess. 

    • This is already done by default on all projects.


  • Refactoring

    • If you are developing something on existing code, implement the security standards.


Comments

Popular posts from this blog

🗑️ Clear storage Mac OS

  🗑️ Clear storage Mac OS 1: Clear system cache: Go to Finder > Go > Go to Folder, then type in "~/Library/Caches" and hit enter. Select all the folders inside the Caches folder and delete them. 2: Clear system logs: Go to Finder > Go > Go to Folder, then type in "/var/log" and hit enter. Select all the files inside the Log folder and delete them. 3: Remove unused language files: Go to Finder > Go > Go to Folder, then type in "/Library/Languages" and hit enter. Delete all the language folders you don't need. 4: Uninstall unused apps: Go to the Applications folder and delete the apps you don't use. 5: Clean up system files: Use a system cleaning tool like CleanMyMac X to scan and remove unnecessary system files. 6: If you have npm installed, clear the caches once in a while with ‘sudo npm cache clean --force’ 7: If you have ionic projects, open the ‘.angular’ folder and delete the ‘cache’ folder inside it.

Turning AIs Into Cavemen Is Actually A Good Idea

    Token limits have been the number 1 problem of vibecoding. Aside from high usage, vague prompting and inefficient context management are two key causes that contribute to this problem. Tokens are counted from two things, the user’s input and agent’s output. You can have the best prompt in the world, but if your AI puke a Shakespearean essay for each response, your token will reach its limit faster. Similarly, if your prompt is too long, your token usage will also skyrocket. Prompting Prompting seems easy enough, but the reality is, if you want quality output, the input must be of similar quality. Here are some tips you can try to achieve a better, token-efficient prompt. Stick to English language only Certain languages may use higher tokens. Switching between languages might not be a good idea. Sure you can control your input prompt, but the output may use more tokens. Extremely short input Do not use ‘please’ or ‘thank you’. Get rid of filler words. Straight to the point....

Setup existing IONIC project in local

Setup existing IONIC project in local  Steps: clone git repo install ionic -  npm install -g @ionic/cli masuk folder repo project install npm dependencies -  npm install run ionic project -  ionic serve buka android studio / xcode -  ionic cap open $var  - $var = ‘android’ atau ‘ios’. ada dua je option, replace $var dgn dua option tu sync changes vscode & dkt android studio / xcode -  ionic cap sync good luck Common issues: dependency conflict check https://www.npmpeer.dev/ utk tengok version yg compatible try naikkan/turunkan version dependency yg keluar dkt error. tembak je sampai hilang error g radle issue try upgrade gradle. kalau tak boleh, try remove folder android & build semula e rror cocoapod make sure install xcode make sure install cocoapod error java  home not found utk mac, buka ~/.zshrc & masukkan chang es dkt VSC tak masuk android studio / xcode try ionic cap sync try quit & buka semula cordo va.variables.gradle no...