相关疑难解决方法(0)

如何在PHP中阻止SQL注入?

如果插入用户输入而不修改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)

可以采取哪些措施来防止这种情况发生?

php mysql sql security sql-injection

2776
推荐指数
28
解决办法
166万
查看次数

什么是软件框架?

有人可以解释一下软件框架是什么吗?为什么我们需要一个框架?框架如何使编程更容易?

frameworks software-design

189
推荐指数
8
解决办法
31万
查看次数

什么是最好的PHP输入清理功能?

我正在尝试提出一个函数,我可以通过我的所有字符串来消毒.因此,从中输出的字符串对于数据库插入是安全的.但是那里有很多过滤功能我不知道应该使用/需要哪些功能.

请帮我填空:

function filterThis($string) {
    $string = mysql_real_escape_string($string);
    $string = htmlentities($string);
    etc...
    return $string;
}
Run Code Online (Sandbox Code Playgroud)

php sanitization filter

158
推荐指数
5
解决办法
16万
查看次数

如果我使用下拉列表,是否必须防止SQL注入?

我知道你绝不应该信任表单中的用户输入,主要是因为SQL注入的可能性.

但是,这是否也适用于唯一输入来自下拉列表的表单(见下文)?

我将保存$_POST['size']到一个会话,然后在整个站点中使用该会话来查询各种数据库(使用mysqliSelect查询),任何SQL注入肯定会损害(可能会丢失)它们.

查询数据库的类型用户输入没有区域,只有下拉列表.

<form action="welcome.php" method="post">
<select name="size">
  <option value="All">Select Size</option> 
  <option value="Large">Large</option>
  <option value="Medium">Medium</option>
  <option value="Small">Small</option>
</select>
<input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

php mysql mysqli sql-injection

95
推荐指数
9
解决办法
9654
查看次数

常量 FILTER_SANITIZE_STRING 已弃用

我已经安装了 PHP 8.1,并开始测试我的旧项目。FILTER_SANITIZE_STRING我已经像这样使用了过滤器:

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
Run Code Online (Sandbox Code Playgroud)

现在我得到这个错误:

已弃用:常量 FILTER_SANITIZE_STRING 已弃用

当我使用时也会发生同样的情况FILTER_SANITIZE_STRIPPED

已弃用:常量 FILTER_SANITIZE_STRIPPED 已弃用

我可以用什么来代替它?

php sanitization filter php-8.1

81
推荐指数
3
解决办法
8万
查看次数

最终的清洁/安全功能

我有很多用户输入$_GET$_POST...目前我总是写mysql_real_escape_string($_GET['var'])..

我想知道你是否可以创建一个能够立即保护,转义和清理$_GET/ $_POST数组的函数,因此每次使用用户输入时都不必处理它.

我在想一个功能,例如cleanMe($input),和它里面,它应该做的mysql_real_escape_string,htmlspecialchars,strip_tags,stripslashes(我想这是所有做它的清洁与安全),然后返回$input.

这可能吗?使得对所有工作的功能$_GET$_POST,所以你会做只有这个:

$_GET  = cleanMe($_GET);
$_POST = cleanMe($_POST);
Run Code Online (Sandbox Code Playgroud)

那么在以后的代码中,当您使用eg $_GET['blabla']或者$_POST['haha']它们时,它们是安全的,剥离的等等?

试了一下自己:

function cleanMe($input) {
   $input = mysql_real_escape_string($input);
   $input = htmlspecialchars($input, ENT_IGNORE, 'utf-8');
   $input = strip_tags($input);
   $input = stripslashes($input);
   return $input;
}
Run Code Online (Sandbox Code Playgroud)

php security xss sql-injection

57
推荐指数
3
解决办法
6万
查看次数

允许跨域ajax请求

在我的项目中,我需要允许其他人向我的脚本发送ajax请求.因此,外部请求可能来自其他网站和域,也可能来自浏览器扩展.
我在脚本的顶部添加了这两行,让他们这样做:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');  
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:这里有任何我错过的安全考虑吗?这个简单的解决方案会造成严重的问
如果是这样,什么是更好的解决方案?

谢谢你的回复.

php ajax cross-domain

39
推荐指数
1
解决办法
8万
查看次数

通过PHP清理GET中的用户数据

你如何通过PHP清理$ _GET -variables中的数据?

我在GET中只消除了一个变量strip_tags.我不确定是否应该清理所有内容,因为上次将数据放入Postgres时,问题最容易通过使用来解决pg_prepare.

php sanitization get

30
推荐指数
2
解决办法
6万
查看次数

如何使用PHP和jQuery发送安全的AJAX请求

问题

所以有一段时间我一直在尝试使用不同的AJAX方法将数据发送到服务器,该服务器将被处理并存储在MySQL数据库中.

AJAX请求命中的页面api.php使用PHP的PDO预处理语句来保存数据,因此MySQL注入并不是真正的问题,需要加密的密码或数据也是由api.php我所要求的处理的这里.我的问题更多地涉及如何确保数据在从客户端传输到服务器时是安全的.

方法

我目前有(对于我在下面列出的登录示例):

  • 域上运行的SSL证书/ HTTPS.
  • 某些AJAX请求(因为没有会话开始与显然不是这个登录请求例子)如果PHP会议是整个网站(两者使用的有效只会工作login.php,并api.php在这个例子中).
  • api.php访问功能时的速率限制.
  • PHP PDO在与内部数据库交互时准备语句api.php.
  • 加密内部的敏感数据api.php(与问题无关).

问题

最后,我的问题是:

  1. 这种使用异步HTTP(Ajax)请求的方法是否足够安全,而不仅仅是将数据提交到PHP页面并重定向?(这种方式改善了用户的体验).
  2. 如何检查我的用户发送的数据是否未被篡改?
  3. 我是否合理地保护用户的数据,如果没有,我还能做些什么?

这个例子

我知道每个人都有不同的方法来处理他们的网站数据和传输数据.我也明白,无论你做什么,你都永远不会受到100%的保护,因为你的系统可能存在一些你无法解释的漏洞和方法.我正在寻找有关安全发送数据的一般方法的反馈/改进,而不是批评下面的具体代码,因为它只是一个例子.但欢迎任何建设性的答案.感谢您抽出时间阅读/回答.

function loginUser() {
    var process = "loginUser";
    var data = $("form").serializeArray();
    data[1].value = SHA512(data[1].value); // sha then encrypt on api.php page 
    data = JSON.stringify(data);

    $("#loginButton").html('<i class="fa fa-spinner fa-pulse fa-lg fa-fw"></i> Login');
    $.ajax({
        type: "POST",
        url: "api.php",
        data: {"process": process, "data": data},
        success: function(data) {
            if (data.response.state == "success") …
Run Code Online (Sandbox Code Playgroud)

javascript php security ajax jquery

28
推荐指数
1
解决办法
4万
查看次数

何时过滤/清理数据:在数据库插入之前或显示之前?

当我准备解决输入数据过滤和消毒问题时,我很好奇是否有最佳(或最常用)的做法?在将数据插入数据库之前过滤/清理数据(HTML,JavaScript等)是否更好?还是应该在准备数据以便在HTML中显示时完成?

几点说明:

  • 我在PHP中这样做,但我怀疑这个问题的答案是语言不可知的.但是,如果您有任何特定于PHP的建议,请分享!
  • 这不是转义数据库插入数据的问题.我已经很好地处理了PDO.

谢谢!

html php filter sanitize

21
推荐指数
5
解决办法
5841
查看次数