PHP中addslashes()和htmlspecialchars() 函数的区别及应用

addslashes()防sql注入:php

定义以下:html

addslashes() 函数返回在预约义字符以前添加反斜杠的字符串。sql

预约义字符是:数据库

  • 单引号(')
  • 双引号(")
  • 反斜杠(\)
  • NULL

提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。cookie

用法以下:函数

<?php
$str = "Who's Peter Griffin?";
echo $str . " This is not safe in a database query.<br>";
echo addslashes($str) . " This is safe in a database query.";
?>  
// 输出:
Who's Peter Griffin? This is not safe in a database query.
Who\'s Peter Griffin? This is safe in a database query.

htmlspecialchars()过滤XSS问题:post

定义以下:spa

htmlspecialchars() 函数把预约义的字符转换为 HTML 实体。code

预约义的字符是:htm

  • & (和号)成为 &
  • " (双引号)成为 "
  • ' (单引号)成为 '
  • < (小于)成为 <
  • > (大于)成为 >

提示:如需把特殊的 HTML 实体转换回字符,请使用 htmlspecialchars_decode() 函数。

用法以下:

<?php
$str = "Bill & 'Steve'";
echo htmlspecialchars($str, ENT_COMPAT); // 只转换双引号
echo "<br>";
echo htmlspecialchars($str, ENT_QUOTES); // 转换双引号和单引号
echo "<br>";
echo htmlspecialchars($str, ENT_NOQUOTES); // 不转换任何引号
?>
// 输出
Bill & 'Steve'
Bill & 'Steve'
Bill & 'Steve'

addslashes()与htmlspecialchars()的区别:

除了两个函数的转义方式不一样外,它们的使用也不一样。

addslashes()经过用于防止sql语句注入,在执行sql语句前对经过get、post和cookie传递来的参数中的单引号,双引号,\ 和null进行转义。

但sql执行成功后,插入到数据库中的数据是不带有转义字符\的。这是若是插入到数据库中的是一些js脚本,当这些脚本被读取出来时仍是会被执行。

这是咱们可对读取出来的数据使用htmlspecialchars()进行过滤,避免执行被注入的脚本。

 

参考文章:

http://www.javashuo.com/article/p-cluksugh-bw.html

相关文章
相关标签/搜索