在SO上阅读一些SQL注入问题和答案,我看到这个答案表明你可以将不受信任的用户输入转换为十六进制,这本质上不需要任何类型的转义,因此完全和完全避免了SQL的可能性注射.
您使用的数据库抽象层(PDO,mysqli,mysql,Pear DB等)无关紧要.
正常工作查询的示例:
$DBH = new PDO('mysql:host=127.0.0.1;dbname=test', 'test', 'testpassword');
// could have been:
//$bookTitle = bin2hex($_GET['title']);
$bookTitle = bin2hex('Catch-22');
$query = "SELECT * from `books` WHERE `title` = UNHEX('$bookTitle')";
foreach ($DBH->query($query) as $row) {
echo "\n<br />\n";
print_r($row);
echo "\n<br />\n";
}
Run Code Online (Sandbox Code Playgroud)
我已经在这里提供了足够的代码供您快速运行测试,如果您有一个包含表的数据库,例如:
CREATE TABLE `books` (`id` INT, `title` VARCHAR(100), `author` VARCHAR(100)) ENGINE=InnoDB CHARACTER SET='utf8';
INSERT INTO `books` VALUES(1, 'Catch-22', 'Joseph Heller');
Run Code Online (Sandbox Code Playgroud)
当然这是过于简单的 - 你通常有输入验证,输出消毒和许多其他抽象,但我们想要专注于这个问题 - 没有必要提供足够的松散来帮助提供易于执行的例子.
我想知道的是这项技术是否存在任何技术缺陷.我特别不 …
我安装了react-toastr并集成了示例代码。
import React from 'react'
import { ToastContainer } from 'react-toastr';
class Notifier extends React.Component
{
updateNotify()
{
this.refs.container.info('hola el mundo');
}
render()
{
return(
<ToastContainer ref="container"
className="toast-top-right" />
);
}
}
Run Code Online (Sandbox Code Playgroud)
当我在容器上调用info()时,消息会弹出,但就像页面顶部的纯文本一样,而不是右上角的样式框。该消息也永远不会消失。因此,似乎缺少CSS和JavaScript组件。
我做错什么了?为什么在Linux下安装fsevents时会有那些警告?如果有问题,我正在使用反应15。我降级为react-toastr 2.9.5版,但没有什么不同。
$ npm install --save react-toastr
myApp@0.3.1 /home/myApp
??? react-toastr@3.0.0
??? babel-runtime@6.26.0
??? core-js@2.5.3
??? regenerator-runtime@0.11.1
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.0.17 (node_modules/react-scripts/node_modules/fsevents): …
Run Code Online (Sandbox Code Playgroud)