如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:
$unsafe_variable = $_POST['user_input'];
mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)
这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)
可以采取哪些措施来防止这种情况发生?
是否有一个catchall函数适用于清理SQL注入和XSS攻击的用户输入,同时仍允许某些类型的html标记?
我正在尝试提出一个函数,我可以通过我的所有字符串来消毒.因此,从中输出的字符串对于数据库插入是安全的.但是那里有很多过滤功能我不知道应该使用/需要哪些功能.
请帮我填空:
function filterThis($string) {
$string = mysql_real_escape_string($string);
$string = htmlentities($string);
etc...
return $string;
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
最终的清洁/安全功能
我在另一个帖子中被告知这段代码非常无用:
function getPost($s) {
if (array_key_exists($s, $_POST))
return mysql_real_escape_string(htmlspecialchars($_POST[$s]));
else return false;
}
function getGet($s) {
if (array_key_exists($s, $_GET))
return mysql_real_escape_string(htmlspecialchars($_GET[$s]));
else return false;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助理解为什么以及如何让它更好吗?也欢迎链接或参考.
只是想要总是改进:)
可能的重复:
PHP:最终的清洁/安全功能用PHP 清理
用户输入的最佳方法是什么?
我应该在我的函数中添加什么来确保传递它的每个字符串都是"服务器友好的"?我使用这个小函数来检查包含名称,电子邮件地址和ID的输入.
function checkInput($str) {
$str = @strip_tags($str);
$str = @stripslashes($str);
$str = mysql_real_escape_string($str);
return $str;
}
Run Code Online (Sandbox Code Playgroud) 这是一个很好的主题,但我想在几种不同的情况下对使用来自用户变量的数据的方法进行一些确认。
该变量从不在数据库中使用,从不存储,仅在用户屏幕上显示。使用哪个函数来确保没有 html 或 javascript 可以搞砸?
该变量被引入数据库,并在 SQL 查询中使用。
变量两者兼而有之。
目前我是xss_clean,和strip_tags。我一直这样做,只是通过自动驾驶仪。有没有更好的技术?如果有相同的问题,请见谅。我有点假设有,虽然我找不到像这样彻底的。
干杯。
当我输入文本时我有一个问题我可以用文本输入html.例如"我正在输入文本".现在,此链接在提交表单时显示为链接.有关如何防止这种情况的任何想法?
I am entering text <a href="xyz.com">Go to my site </a>. This is the input so when i output the data it comes out as I am entering text **Go to my site** with the hyperlink.
Run Code Online (Sandbox Code Playgroud) 可能重复:
最终的清洁/安全功能
在阅读了PHP安全性之后,我觉得我编码的任何东西都是不安全的.因此,为了解决用户输入的安全问题,我创建了一个函数,允许我在任何使用情况下转义并删除用户输入.
我想知道这实际上是否安全,如果我能使它更安全.这会阻止什么样的攻击?从我可以通过使用_GET告诉XSS,HTML输入和MYSQL注入将被阻止?
function _INPUT($name,$tag,$sql,$url)
{
if ($_SERVER['REQUEST_METHOD'] == 'GET')
$filter = ($_GET[$name]);//Assign GET to filter variable
if ($tag == true)//Remove all HTML, PHP and JAVASCRIPT tags
{
$filter = strip_tags($filter);
}
if ($sql == true)//If MYSQL escaping is enabled
{
$filter = mysql_real_escape_string($filter);
}
if ($url == true)//If URL encoding is enabled
{
$filter = urlencode($filter);
}
return $filter;
}
$output = _INPUT('name',true,true,true);
Run Code Online (Sandbox Code Playgroud)
我也将使用MYSQL的预处理语句,虽然我需要更多地阅读它们以完全理解它如何防止注入.
感谢您的时间.
以下此功能是否能够阻止XSS攻击和SQL注入?
require_once('security.class.php');
function secure_data($data) {
$data = mysql_real_escape_string($data);
$filtered_data = filter_var($data, FILTER_SANITIZE_STRING);
$secure_class = new security_class();
$clean_data = $secure_class->xss_clean($filtered_data);
return $clean_data;
}
Run Code Online (Sandbox Code Playgroud)
该安全类是笨.
我正在尝试使用外国支付系统,但在实施这个系统时遇到了困难.
我试图修改的类看起来像这样:
class MyShop extends Shop {
var $currency = "EUR";
}
Run Code Online (Sandbox Code Playgroud)
我通过执行它
$myShop = new MyShop('user', 'pass', TRUE, TRUE);
$result = $myShop->pay();
Run Code Online (Sandbox Code Playgroud)
我现在的问题是:如何在这个类中从$ _POST获取变量?我试图以这种方式动态货币动态..
我已经尝试过这里发布的解决方案:如何从帖子中获取数据到类
但我想我在OOPhp失败了:/
不管怎么说,还是要谢谢你!