规则# 11 - 013数据库查询您的项目必须使用安全绑定等特性

信息:以下规则描述一个样本。

得到一个完整的访问所有规则的描述,升级你的计划现在

SQL注入是一种安全漏洞的恶意SQL语句插入到一个执行的输入字段。SQL注入时使用下面这样的代码:

1
美元查询=“SELECT * FROM用户用户名=””美元用户名”和密码=”.md5 (美元密码)。“””;

在这样的请求,你可以分配美元的用户名价值托托”或1 = 1。生成的SQL请求将:

1
选择*用户在哪里用户名=“托托”1=1密码=“f71dbe52628a3f83a77ab494817525c6”

因为操作符优先级,这个请求相当于:

1
选择*用户在哪里用户名=“托托”

结果是,恶意用户可以登录其他应用程序用户无需提供任何密码。

为了避免这个问题,您可以在SQL查询中使用参数绑定。这个特性是由PDO-PHP模块和使用的是这样的:

1 2 3 4 5 6
美元卡路里=150年;美元颜色=“红色”;美元支撑=美元康涅狄格州- >准备(选择名称,颜色,从水果热量卡路里< =热量和颜色:颜色的);美元支撑- >bindParam (:卡路里的,美元卡路里,PDO::PARAM_INT);美元支撑- >bindParam (:颜色的,美元颜色,PDO::PARAM_STR,12);美元支撑- >execute ();

从PDO学说完全集成这一特性。你可以这样使用:

1 2 3
美元查询=美元新兴市场- >createQuery (“从CmsUser u离开加入选择u。文章用一个。主题:foo”);美元查询- >setParameter (“foo”,美元喷火);美元用户=美元查询- >getResult ();

学说提供了很多工具来抽象你从原始SQL查询。出于这个原因,你会自动保护,当你使用“高级”的方法:

1 2
美元qb=美元- >createQueryBuilder (“p”);美元qb- >(在哪里美元expr- >像(“p.u”,“test_ %”));

规则设置

定制这个规则,您可以将以下部分添加到您的项目配置:

规则:#……教义。database_query_contains_string_and_variable_concatenation:启用:真的