技术标签: sql注入
1.必须认定用户输入的数据都是不安全的
用户输入的数据进行过滤处理
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
$result = mysqli_query($conn, "SELECT * FROM users
WHERE username=$matches[0]");
}
else
{
echo "username 输入异常";
}
让我们看下在没有过滤特殊字符时,出现的SQL情况:
// 设定$name 中插入了我们不需要的SQL语句 $name = "Qadir'; DELETE FROM users;"; mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
以上的注入语句中,我们没有对 $name 的变量进行过滤,$name 中插入了我们不需要的SQL语句,将删除 users 表中的所有数据。
在PHP中的 mysqli_query() 是不允许执行多个 SQL 语句的,但是在 SQLite 和 PostgreSQL 是可以同时执行多条SQL语句的,所以我们对这些用户的数据需要进行严格的验证。
防止SQL注入,我们需要注意以下几个要点:
在脚本语言,如Perl和PHP你可以对用户输入的数据进行转义从而来防止SQL注入。
PHP的MySQL扩展提供了mysqli_real_escape_string()函数来转义特殊的输入字符。
if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysqli_real_escape_string($conn, $name); mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
like查询时,如果用户输入的值有"_"和"%",则会出现这种情况:用户本来只是想查询"abcd_",查询结果中却有"abcd_"、"abcde"、"abcdf"等等;用户要查询"30%"(注:百分之三十)时也会出现问题。
在PHP脚本中我们可以使用addcslashes()函数来处理以上情况,如下实例:
$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_"); // $sub == \%something\_ mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
addcslashes() 函数在指定的字符前添加反斜杠。
语法格式:
addcslashes(string,characters)
1.软件版本ISE14.72.本算法理论知识ROM资源,作为产生离散正弦信号的另一种有效途径,CORDIC(坐标旋转数值计算)算法已越来越受到青睐。其基本思想是通过一系列逐次递减的、与运算基数相关的往复偏摆以逼近最终需要达到的旋转角度。该算法仅利用加法和移位两种运算通过迭代方式进行矢量旋转, CORDIC算法由于只采用加法和移位运算,因此很适合在FPGA中实现,它可以用来实现数字下变频中的NCO、混频器和坐标变换等功能。 实现NCO的另一种方法是采用基于坐标旋转数字式计算机的算...
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------今天学习了socket,学习做了一个聊天的软件,其中用到了多线程和socket的知识。现在总结一下。创建监听服务端Socketfuwu=fuwu=newSocket(AddressFam...
解决办法:在发起Http请求的Activity里面的onCreate函数里面添加如下代码: StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites().detectNetwork()...
对map最初的印象,源于王建德老师在山东NOIP夏令营上那销魂的一句“map,i,j”(音:唛颇,挨,杰= =)ruka上对map并没有讲很多,TY菌说map主要用来写哈希(虽然她曾用它写过邻接矩阵= =循环嵌套map intOrz),而李晨和里奥甚至表示基本不用map。但是既然有这一项奇妙的东西,想必是有用的,把前两节学的总结一下。map是一个映射,也称关联数组,是一周关联式容器。和
1.意图 定义对象间的一种一对多的关系,当一个对象的状态发生改变的时候,所有依赖 它的对象都得到通知。 2.参与者 Subject -目标知道它的观察者 -提供注册和删除它的观察者 Observer -为那些在目标中发生改变...
使用Spark对日志进行简单的文本解析 原日志格式: 从hdfs上读取日志文件:val rdd = sc.textFile("hdfs://master:9000/spark/localhost_access_log.2015-04-24.txt") 过滤不正确的数据并且将日期合并:rdd.map(_.split(" ")).filter(_.length == 10).map(x =
【初步理解】.NET Core 是一个开源的、跨平台的 .NET 实现。而 .NET Framework 是基于 Windows 的 .NET 实现,Mono 是.NET Framework 的一个开源、跨平台的实现。.NET Core 分为两大块:1).NET Core Framework,2).NET Core Runtime。.NET Core Framework...
环境:CentOS-6.4-x86_64-minimalmysql-5.6.12.tar.gzyum -y install make gcc-c++ cmake bison-devel ncurses-develgroupadd mysqluseradd -g mysql mysqlcurl -o mysql-5.6.12.tar.gz http://cd
我的51cto博客http://cnjava.blog.51cto.com/
<mvc:annotation-driven />mvc:default-servlet-handler/和 <context:component-scan base-package=“com”></context:component-scan>三者之间的关系1.<context:component-scan base-package=“com
TIME_WAIT状态: 在TCP连接中,主动关闭链接的一方会进入TIME_WAIT状态,它会保持长达2MSL周期的时间,为什么会保持这么长的时间上一篇博客中已经提到过了。如果server的最后一次ACKclient没有收到,client会重新发送一次fin这个时间是在2ML周期之间的,这个时候server还保持着TIME_WAIT的状态所以它会再次发送ACK确认,而如果不等待这么长时间的话,s
效果图:emphasis:{ itemStyle:{ color:'#14E2FF', borderColor:'#14E2FF' //如果borderColor颜色不与color一致,则拐点处会有边框 } }