当前位置: 首页 > 后端技术 > PHP

PHP安全防范方法

时间:2023-03-29 19:32:19 PHP

SQL注入SQL注入是一种恶意攻击。用户通过在表单域中输入SQL语句的方式来影响SQL的正常执行。预防方法使用mysql_real_escape_string(),或addslashes()来过滤数据手动检查每条数据是否是正确的数据类型使用preparedstatements和绑定变量使用preparedpreparedstatements来分离数据和SQL逻辑Preparedstatements会自动过滤(如:escaping)作为一种编码标准,可以帮助团队中的新人避免上述问题。与直接执行SQL语句相比,预处理语句有两个主要优点。准备好的语句大大减少了分析时间。进行了查询(尽管该语句被执行了多次)。绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。Preparedstatements对SQL注入非常有用,因为参数值发送后使用不同的协议来保证数据的合法性。在PHP中,有两种主要的方式来使用准备好的语句。使用mysqli数据库使用PDOStatement类对象查询只需要解析(或准备)一次,但可以用相同或不同的参数执行多次。当查询准备好(Prepared)时,数据库会分析、编译和优化其执行查询的计划。对于复杂的查询,如果你想多次重复使用不同参数但相同结构的查询,这个过程会花费很多时间,使你的应用程序变慢。通过使用准备好的语句,您可以避免重复分析、编译和优化。简单来说,准备好的语句使用更少的资源并执行得更快。服务器措施关于SQL注入,不得不说现在大部分虚拟主机都开启了magic_quotes_gpc选项。在这种情况下,所有客户端GET和POST数据都会被addslashes自动处理,所以此时字符串值SQL注入是不可行的,但是需要防止数值的SQL注入,比如用intval等函数处理().但是如果你写的是通用软件,你需要读取服务器的magic_quotes_gpc并进行相应的处理。XSS攻击XSS(跨站点脚本)是一种用户在您的网站中输入一些数据的攻击,其中包括客户端脚本(通常是JavaScript)。如果不过滤就输出数据到另一个网页,就会执行这个脚本。防止它的方法是对包括单引号和双引号在内的非法HTML代码使用htmlspecialchars()函数。使用htmlspecialchars()函数时要注意第二个参数。如果直接使用htmlspecialchars($string),第二个参数默认为ENT_COMPAT。默认函数只对双引号(")进行转义,不会对单引号(')进行转义。因此htmlspecialchars函数需要更多的时候加上第二个参数,应该这样使用:htmlspecialchars($string,ENT_QUOTES).当然,如果需要转换任何引号,使用htmlspecialchars($string,ENT_NOQUOTES)。另外,尽量少用htmlentities。htmlentities和htmlspecialchars在全英文中没有区别,都可以达到目的但是在中文中,htmlentities会转换所有的html代码,包括它不能识别的汉字,htmlentities和htmlspecialchars这两个函数不支持'well这样的字符串,不能转换,所以用htmlentities和htmlspecialchars转换的字符串只能防止XSS攻击,但不能防止SQL注入攻击。您不小心执行了任意代码,通常是通过文件包含。编写不当的代码可能允许包含和执行远程文件。例如,许多PHP函数,如require,可以包含URL或文件名预防方法来过滤用户输入并禁用php.ini中的allow_url_fopen和allow_url_include。这将禁用require/include/fopen远程文件。文章参考:https://blog.csdn.net/tim_php...https://blog.csdn.net/come_on...https://www.cnblogs.com/wt645...