多学习才能多赚钱之:php安全问题思考

2022-10-11 20:50:22 122 0
魁首哥

排序的方法多种多样,通常情况下,我们经常使用到的数组排序函数有:sort()、rsort()、asort()、arsort()、ksort()、krsort()。下面为大家一一详细介绍。

0=SORT_REGULAR-默认。把每一项按常规顺序排列(StandardASCII,不改变类型)

1=SORT_NUMERIC-把每一项作为数字来处理。

2=SORT_STRING-把每一项作为 字符串 来处理。

3=SORT_LOCALE_STRING-把每一项作为字符串来处理,基于当前区域设置(可通过setlocale()进行更改)。

推荐:【PHP教程】

一、防止 sql注入

什么是 SQL注入攻击

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

寻找SQL注入的方法:

1.通过get请求

2.通过post请求

3.其他http请求,如cookie

常见的SQL注入问题:

数据库查询参数的类型转换处理

  1. 转义字符处理不当
  2. Talkischeap,Showmethecode.
  3. 多说无益,代码亮出来吧!
  4. 测试:
  5. 在下边的网址后边加一个单引号,就会报数据库错误
    1. 类型处理不当
    2. Mysql 内置了一个命令,可以读取文件
    3. 该命令会获取数据库管理员的密码。
    4. 处理方法:
    5. 需要将客户端传过来的数据进行类型强制转换,而后再查询
      1. 查询语句组织不当
        1. 错误处理不当
        2. 即将站点的错误信息暴漏给用户,这样非常危险。
        3. 数据入库时将转换单引号、双引号、反斜杠为实体
        4. 在入库的时候如果不过滤'””这样的东西,这样会使数据库报错,或者注入等问题。
        5. 先将字符串用 HTML specialchars()转换为实体后存储到数据库,然后从数据库读出来时htmlspecialchars_decode()转为HTML标签。
        6. htmlspecialchars()函数把一些预定义的字符转换为HTML实体。
        7. 函数原型:
        8. 预定义的字符是:
        9. htmlspecialchars_decode()函数把一些预定义的HTML实体转换为字符(和htmlspecialchars相反)。
        10. 函数原型:
        11. 二、防止xss攻击
        12. 什么是xss攻击?
        13. 和上边的sql注入不同的是,xss攻击是合法的字符串,如经过htmlspecialchars()方法实体化后,可以保存在数据库中,但是,当访问含有该字符串的内容页面时,就会出现问题,如字符串里边还有Java script ,frame代码,原来的页面就会被篡改。
        14. 比如你写个留言本,有人去留言写< iframe >,这个被显出来容易挂病毒都很容易,和数据库无关。
        15. XSS概念
        16. XSS又称CSS,全称CrossSiteScript(跨站脚本攻击),XSS攻击类似于SQL注入攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie信息、破坏页面结构、重定向到其它网站等。
        17. 理论上,只要存在能提供输入的表单并且没做安全过滤或过滤不彻底,都有可能存在XSS漏洞。
        18. 下面是一些最简单并且比较常见的恶意字符XSS输入:
        19. 1.XSS输入通常包含JavaScript脚本,如弹出恶意警告框:
        20. 2.XSS输入也可能是HTML代码段,譬如:
        21. (1).网页不停地刷新
        22. (2).嵌入其它网站的链接
        23. 除了通过正常途径输入XSS攻击字符外,还可以绕过JavaScript校验,通过修改请求达到XSS攻击的目的,如下图:
        24. 了解到XSS攻击的原理和危害后,其实要预防也不难,下面提供一个简单的PHP防止XSS攻击的函数:
        25. 除了通过正常途径输入XSS攻击字符外,还可以绕过JavaScript校验,通过修改请求达到XSS攻击的目的。
        26. 了解到XSS攻击的原理和危害后,其实要预防也不难,下面提供一个简单的PHP防止XSS攻击的函数:
        27. 避免被XSS:
        28. 1.给用户开放的编辑器尽量过滤掉危险的代码
        29. 如果是html编辑器,一般的做法是保留大部分代码,过滤部分可能存在危险的代码,如script,iframe等等
        30. 三、PHPMySQL预处理语句
        31. 预处理语句对于防止MySQL注入是非常有用的。
        32. 预处理语句及绑定参数
        33. 预处理语句用于执行多个相同的SQL语句,并且执行效率更高。
        34. 预处理语句的工作原理如下:
        35. 预处理:创建SQL语句模板并发送到数据库。预留的值使用参数”?”标记。例如:
        36. 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。
        37. 执行:最后,将应用绑定的值传递给参数(”?”标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。
        38. 相比于直接执行SQL语句,预处理语句有两个主要优点:
        39. 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。
        40. 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
        41. 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。
        42. PDO 预处理机制
        43. 可以使用多种方式实现预处理:指的是在绑定数据进行执行的时候,可以有多种方式。
        44. 预处理语句中为变量
        45. 使用数组指定预处理变量
        46. 1、准备预处理语句(发送给服务器,让服务器准备预处理语句)
        47. 2、发送预处理语句
        48. 3、给预处理绑定数据
        49. 4、执行预处理:将要操作的数据发送给预处理语句,再执行预处理语句
        50. PDO预处理原理
        51. PDO的预防sql注入的机制也是类似于使用mysql_real_escape_string进行转义,PDO有两种转义的机制,第一种是本地转义,这种转义的方式是使用单字节字符集(PHP<5.3.6)来转义的(单字节与多字节),来对输入进行转义,但是这种转义方式有一些隐患。隐患主要是:在PHP版本小于5.3.6的时候,本地转义只能转换单字节的字符集,大于5.3.6的版本会根据PDO连接中指定的charset来转义。
        52. 第二种方式是PDO,首先将sql语句模板发送给MysqlServer,随后将绑定的字符变量再发送给Mysqlserver,这里的转义是在MysqlServer做的,它是根据你在连接PDO的时候,在charset里指定的编码格式来转换的。这样的转义方式更健全,同时还可以在又多次重复查询的业务场景下,通过复用模板,来提高程序的性能。如果要设置MysqlServer来转义的话,就要首先执行:
        53. 原始链接方法:
        54. 可见这次PHP是将SQL模板和变量是分两次发送给MySQL的,由MySQL完成变量的转义处理,既然变量和SQL模板是分两次发送的,那么就不存在SQL注入的问题了,但需要在DSN中指定charset属性,如:
        55. 示例:
        56. 总结:当调用prepare()时,查询语句已经发送给了数据库服务器,此时只有占位符?发送过去,没有用户提交的数据;当调用到execute()时,用户提交过来的值才会传送给数据库,他们是分开传送的,两者独立的,SQL攻击者没有一点机会。
        57. 小结
        58. ①、关于sql注入可以使用htmlspecialchars()或addslashes()方法,如果连接mysql,可以用mysql_real_escape_string(),还有在php.ini中配置magic_quotes_gpc开启自动转义的扩展。
        59. PHP环境打开自动转义,PHP.INI中查看
        60. 当magic_quotes_gpc=on时将自动进行转义(默认是on),可在程序中用get_magic_quotes_gpc()检查他的状态
        61. 程序为:
        62. ②、关于xss攻击可以写一个去处script,frame等代码的方法:
        63. 直接用这个函数editor_safe_replace代替htmlspecialchars,既保证安全又能用大部分html代码
        64. 所以,对于PHP的安全而言,一定要对用户提交的数据进行过滤校验处理,即先防止SQL注入,后再进行XSS过滤,这两个都需要两手一起抓,且两手都要硬,否则,你的网站将会存在很大的安全风险。
        65. 以上就是php安全问题思考的详细内容,更多请关注其它相关文章!

4=SORT_NATURAL-把每一项作为字符串来处理,使用类似natsort()的自然排序。

5=SORT_FLAG_CASE-可以结合(按位或)SORT_STRING或SORT_NATURAL对字符串进行排序,不区分大小写。

定义和用法:

sort()函数对 索引 数组进行升序排序。

rsort()函数对索引数组进行降序排序,其他用法一样。

注释:本函数为数组中的单元赋予新的键名。原有的键名将被删除。

如果成功则返回TRUE,否则返回 FALSE

提示:请使用rsort()函数对索引数组进行降序排序。

sort()函数用于对数组单元从低到高进行排序。

rsort()函数用于对数组单元从高到低进行排序。

asort()函数用于对数组单元从低到高进行排序并保持索引关系。

PHPasort()函数用于对数组单元从低到高进行排序并保持索引关系,如果成功则返回TRUE,失败则返回FALSE。

arsort()函数用于对数组单元从高到低进行排序并保持索引关系。

PHParsort()函数行为与asort()相反,对数组单元进行由高到低排序并保持索引关系,请参考asort()函数使用。

ksort()函数用于对数组单元按照键名从低到高进行排序。

PHPksort()函数用于对数组单元按照键名从低到高进行排序,如果成功则返回TRUE,失败则返回FALSE。本函数会保留原来的键名,因此常用于关联数组。

krsort()函数用于对数组单元按照键名从高到低进行排序。

PHPkrsort()函数行为与ksort()相反,对数组单元按照键名进行由高到低排序,请参考ksort()函数使用。

使用用户自定义的比较函数对数组$a中的元素进行排序:

以上是工作中常用的数组排序方法,想了解更多相关问题:PHP视频教程

以上就是php排序函数详细讲解(附实例)的详细内容,更多请关注其它相关文章!

收藏
分享
海报
0 条评论
122
上一篇:淘宝尾款没付定金会退吗(淘宝付了定金但不想买了怎么办) 下一篇:供的组词(伦可以怎么组词)

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码