SQL注入是一种恶意攻击,用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。php
查询只须要被解析(或准备)一次,但能够使用相同或不一样的参数执行屡次。当查询准备好(Prepared)以后,数据库就会分析,编译并优化它要执行查询的计划。对于复杂查询来讲,若是你要重复执行许屡次有不一样参数的但结构相同的查询,这个过程会占用大量的时间,使得你的应用变慢。经过使用一个预处理语句你就能够避免重复分析、编译、优化的环节。简单来讲,预处理语句使用更少的资源,执行速度也就更快。html
XSS(跨站点脚本攻击)是一种攻击,由用户输入一些数据到你的网站,其中包括客户端脚本(一般JavaScript)。若是你没有过滤就输出数据到另外一个web页面,这个脚本将被执行。mysql
是针对非法的HTML代码包括单双引号等,使用htmlspecialchars()函数 。web
在使用htmlspecialchars()函数的时候注意第二个参数, 直接用htmlspecialchars($string) 的话,第二个参数默认是ENT_COMPAT,函数默认只是转化双引号(“), 不对单引号(‘)作转义.sql
因此,htmlspecialchars函数更多的时候要加上第二个参数, 应该这样用: htmlspecialchars($string,ENT_QUOTES).固然,若是须要不转化如何的引号,用htmlspecialchars($string,ENT_NOQUOTES).数据库
另外, 尽可能少用htmlentities, 在所有英文的时候htmlentities和htmlspecialchars没有区别,均可以达到目的.可是,中文状况下, htmlentities却会转化全部的html代码,连同里面的它没法识别的中文字符也给转化了。服务器
htmlentities和htmlspecialchars这两个函数对 '之类的字符串支持很差,都不能转化, 因此用htmlentities和htmlspecialchars转化的字符串只能防止XSS攻击,不能防止SQL注入攻击.函数
代码注入是利用计算机漏洞经过处理无效数据形成的。问题出在,当你不当心执行任意代码,一般经过文件包含。写得很糟糕的代码能够容许一个远程文件包含并执行。如许多PHP函数,如require能够包含URL或文件名优化
文章参考:
https://blog.csdn.net/tim_php...
https://blog.csdn.net/come_on...
https://www.cnblogs.com/wt645...网站