使php web应用程序安全

use*_*267 1 php security

保护我的项目免受攻击(例如:SQL注入)我使用下面的查询参数页面(*.php?query = value):

$id=strip_tags($id);
$id=mysql_real_escape_string($id);    
if(is_numeric($id) && strlen($id)<=3) //id are numbers maximum of 3 digits
Run Code Online (Sandbox Code Playgroud)
  • 除了使用客户端(JavaScript)和服务器端(php)验证之外,还strip_tags()可以根据需要过滤数据.
  • 密码使用加密 bcrypt()
  • 所有邮件都使用加密 mcrypt_ecb()
  • 页面只能在isset($_SESSION["id"])登录时访问.
  • error_reporting(0);隐藏错误.
  • $_POST 代替 $_REQUEST
  • mysql_real_escape_string(); 对于每一个输入

实际上我的项目将由大学使用,并且我对安全性的关注很紧张,因为回溯使其易于渗透,因此我努力使其安全.(我知道这是一个很大的问题,但任何形式的帮助都会非常有用)但作为一名学生,我想知道我还缺少什么才能使其安全?

jrd*_*rd1 10

首先:

避免PHP的MySQL功能像瘟疫一样

使用PHP的MySQLi函数,而不是在非常,非常最低PDO来代替.MySQLi,尤其是PDO功能,在安全性方面更好.但是,在这两者中,PDO是最好的交易,因为它们为准备好的语句提供了更高的抽象,这大大增加了对SQL注入攻击的防御:

PHP应用程序中的大多数SQL语句使用变量输入来确定SQL语句的结果.要安全地将用户提供的输入传递给SQL语句,请使用参数标记(?)或表示变量输入的命名变量来准备语句.执行预准备语句时,将输入值绑定到参数标记.数据库引擎确保将每个输入值视为单个参数,从而防止针对您的应用程序的SQL注入攻击.与通过PDO :: exec()发出的语句相比,预准备语句提供了性能优势,因为数据库管理系统为每个准备好的语句创建一个访问计划,如果随后重新发布该语句,它可以重用.

另外,避免使用一些较旧的折旧PHP函数.

接下来,通常,如果您使用PHP或任何创建动态请求的语言,则意味着用户在某种程度上输入,并且通常是与数据库的后续交互.Web编程规则1:永远不会在任何情况下信任用户输入.完全没有.输入的所有内容必须经过清理和验证,以避免出现安全问题.您可以使用PHP本机执行此操作,但老实说,它需要大量工作并且需要大量注意细节 - 这当然会扩展您的开发时间.

如果这不是一个学术练习或者是一个处理自我训练的练习 - 如果可以的话,尝试使用一个框架 - 它可能会在以后的路上为您节省许多麻烦,因为好的框架可以处理一些处理逃逸的开销. ,验证等.这意味着如果你去突击队并编写自己的代码而没有框架:大多数,如果不是你将要实现的所有功能都将为你完成,并且机会是 - 在框架中做得更好.

此外,他们让PHP开发更容易,偶尔,好玩.当然,并非所有框架都是平等的,所有框架也都存在安全问题.但是,这是你必须记住的事情,并且在任何时候都要保持自己的信息.

如果这是学术练习或自学习练习,请阅读:

不使用PHP框架的原因?

许多顶级StackOverflow PHP帖子和Programmers.StackExchange帖子可以帮助您完成旅程.

这里有一些开头:

(这是对大多数这些链接所讨论的内容的概述)

阅读您所在领域的安全实践.它一直在发展.

如果您对框架感兴趣,可以参考以下几个受欢迎的框架:

但是,无论哪种方式 - 祝你好运!