如何防止注入(html、php)?

如何防止注入(html、php)?,php,javascript,html,regex,xss,Php,Javascript,Html,Regex,Xss,可能重复: 我有一个和一个来评论我的网站。显然,我在界面页面中回送它们,并将它们插入我的数据库 我想知道当一个人注射(例如)一个来破坏页面或向破坏数据库发送查询时,我必须做什么 什么是简单的方法 我曾尝试使用搜索>'“drop但尽管我使用了\”而不是“,但它不起作用,在PHP中,我遇到了错误 手动搜索这些字符是否是最好的方法(PHP和Javascript)?您试图实现的是防止某种形式的攻击。您试图防止持久性的攻击: 持久(或存储)XSS漏洞是一个更具破坏性的漏洞 跨站点脚本缺陷的变体:当数据

可能重复:

我有一个
和一个
来评论我的网站。显然,我
在界面页面中回送它们,并将它们插入我的数据库

我想知道当一个人注射(例如)一个
来破坏页面或向破坏数据库发送查询时,我必须做什么

什么是简单的方法

我曾尝试使用搜索
>'“drop
但尽管我使用了
\”
而不是
,但它不起作用,在PHP中,我遇到了错误


手动搜索这些字符是否是最好的方法(PHP和Javascript)?

您试图实现的是防止某种形式的攻击。您试图防止持久性的攻击:

持久(或存储)XSS漏洞是一个更具破坏性的漏洞 跨站点脚本缺陷的变体:当数据 由攻击者提供的信息由服务器保存,然后永久保存 在搜索过程中返回给其他用户的“正常”页面上显示 常规浏览,没有正确的HTML转义。一个典型的 这是允许用户发布的在线留言板 供其他用户阅读的HTML格式的消息

有很多种方法可以阻止他们。仔细检查并找出答案。但大多数情况下,这是一个个人单独处理的大问题

最好的方法是使用既简单又容易的方法。它可能有点慢。但是额外的处理是值得的。下面是一个基本代码,让您举例说明如何简单地使用它:

<?php
    require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php';

    $config = HTMLPurifier_Config::createDefault();
    $purifier = new HTMLPurifier($config);
    $clean_html = $purifier->purify($dirty_html);
?>
例如

$config->set('HTML.Allowed', 'p,b,a[href],i');
$config->set('URI.Base', 'http://www.example.com');
$config->set('URI.MakeAbsolute', true);
$config->set('AutoFormat.AutoParagraph', true);
编辑:

要回答有关停止错误SQL注入攻击的问题,请参阅以下问题:和

引述:

Use prepared statements and parameterized queries. These are SQL statements that sent to and parsed by the database server separately from any parameters.

If you use PDO you can work with prepared statements like this:

$preparedStatement = $db->prepare('SELECT * FROM employees WHERE name = :name');

$preparedStatement->execute(array(':name' => $name));

$rows = $preparedStatement->fetchAll();
where $db is a PDO object, see the PDO documentation. The mysqli class also provides parameterized queries.
使用
addslashes($your\u变量)
functon。这将在特殊字符之前添加反斜杠,并使用
stripslashes($db\u result)
清除不需要的斜杠。

你也可以使用 mysql\u real\u escape\u string()

我在使用时从未遇到过问题:

$login = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|update|declare|exec|set|cast|$|#|%|&|'|\"|`|;|\*|--|\\\\)/"),"",trim(addslashes(htmlspecialchars(strip_tags($_POST['comment'])))));

手动将您与simple混淆。根据上下文使用转义函数。数据库中的字符串使用数据库转义函数。返回页面的字符串使用HTML转义函数。此处有两个单独的问题。请参阅和
$login = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|update|declare|exec|set|cast|$|#|%|&|'|\"|`|;|\*|--|\\\\)/"),"",trim(addslashes(htmlspecialchars(strip_tags($_POST['comment'])))));