小编Luk*_*own的帖子

如何使用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万
查看次数

什么固定标签在PhpStorm中做什么?

我注意到你可以在PhpStorm的任何文件上固定一个标签,它有什么作用?看来我无论如何都可以关闭标签.

intellij-idea phpstorm webstorm

11
推荐指数
1
解决办法
1018
查看次数

推送到 GitHub 问题 - HTTP/2 流 0 未完全关闭:取消(错误 8)

尝试将我的代码提交到 GitHub,之前从未遇到过问题,并且我已经完成了所有快速修复,但到目前为止还没有成功。错误:

Enumerating objects: 10, done.                                                  
Counting objects: 100% (10/10), done.                                           
Delta compression using up to 16 threads
Compressing objects: 100% (6/6), done.                                          
Writing objects: 100% (6/6), 2.19 MiB | 33.00 MiB/s, done.                      
Total 6 (delta 3), reused 0 (delta 0)
error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8)
fatal: the remote end hung up unexpectedly
fatal: the remote end hung up unexpectedly
Everything up-to-date
Run Code Online (Sandbox Code Playgroud)

我已经查看了这些问题:

  1. Git Push 在推送时返回错误?
  2. Git,致命:远程端意外挂断

我已经用 更新了我的缓冲区git …

git github

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

允许 Gatsby 中的可选 GraphQL 数据

我正在尝试在我的gatsby-node.js文件中构建一个支持可选值的类型。我认为这已经完成了[String!]!

gatsby-node.js如何加载我在内部创建的新类型home.js

gatsby-node.js:

const path = require('path');
exports.createSchemaCustomization = ({ actions }) => {
    const { createTypes } = actions;
    const typeDefs = `
        type markdownRemark implements Node {
            frontmatter: Features
        }
        type Features {
            title: [String!]!
            description: [String!]!
        }
    `;
    createTypes(typeDefs);
};
Run Code Online (Sandbox Code Playgroud)

页面/home/home.js:

export const query = graphql`
    query HomeQuery($path: String!) {
        markdownRemark(frontmatter: { path: { eq: $path } }) {
            html
            frontmatter {
                features {
                    title
                    description
                }
            }
        }
    } …
Run Code Online (Sandbox Code Playgroud)

reactjs yaml-front-matter graphql gatsby

6
推荐指数
1
解决办法
3501
查看次数

PhpStorm 无法识别类别名

我已经看过这个问题,但不幸的是没有答案。

我正在使用 PhpStorm 并且正在构建一个加载了 Composer 项目的项目。我试图让 PhpStorm 在我按 ctrl+单击它们时识别我的类/函数,特别是对于通过 Composer 安装的项目。

我试过更改Source Foldersin Settings/Directories但我仍然无法让它工作。

我正在使用 require __DIR__ . '/vendor/autoload.php';加载我的作曲家依赖项。

我需要做什么才能让 PhpStorm 从通过 Composer 加载的文件中识别我的声明?


为了支持我的问题,这里有一些图片:

我的 test.php 文件:(注意它如何无法识别我的类): project/test.php 在此处输入图片说明

通过 Composer 添加并使用自动加载器安装的项目: project/vendor/braintree/braintree_php/lib/Braintree/Subscription.php 在此处输入图片说明

我的 composer.json 文件: project/composer.json 在此处输入图片说明

php braintree phpstorm

5
推荐指数
1
解决办法
1629
查看次数

MYSQL:使用if语句的过程

我正在尝试创建一个首先检查用户密码的例程,如果它是正确的,它将从不同的表返回一些值或更改一行中的某些值.

如果没有在PHP中处理两个查询,这是否可行?首先调用密码,检查其是否正确,然后允许用户更改名称.

这是一个使用电子邮件和密码获取用户行的示例.

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_user_info`(
    IN in_Email VARCHAR(45),
    IN in_Pass VARCHAR(45)
    )
BEGIN
    SELECT * FROM User WHERE Email = in_Email AND Pass = in_Pass;
END
Run Code Online (Sandbox Code Playgroud)

这就是我到目前为止所得到的:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `change_pass`(
    in_Email VARCHAR(45),
    in_PassOld VARCHAR(45),
    in_PassNew VARCHAR(45)
)
BEGIN
    SET @PassOld = (SELECT Pass From User WHERE Email = in_Email);

    IF(@PassOld = in_PassOld) THEN
        UPDATE User SET Pass = in_PassNew WHERE Email = in_Email;

    END IF;

ENDND IF;
END
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!

mysql stored-procedures if-statement

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

Angular 2 - HTTP基本身份验证请求无法输入详细信息

我一直在尝试多种方法来访问使用基本身份验证的API.问题是Angular 2无法输入用户名和密码.

如果您导航到基本的auth网站,它会要求您输入用户名和密码,然后在大多数浏览器上单击Log InCancel.如果你点击这个网站上的取消,它将返回一个字符串说明User pressed Cancel,而这正是我通过Angular的HTTP请求做到的.

在这个阶段,Authorization标头中的编码用户名和密码是否正确无关紧要,我只需要能够发送用户名和密码并让它尝试登录.

有什么建议?

request() {
        let headers = new Headers();
        headers.append('Authorization', "Basic dWRpZDM6cGFzc3dvcmQ=");

        this.http.get('http://localhost:8888/api/', {
            headers: headers
        })
            .subscribe(
                data => this.example = data.text(),
                err => this.logError(err.text()),
                () => console.log('Request Complete')
            );
        console.log(this.example);
    }
Run Code Online (Sandbox Code Playgroud)

javascript authentication authorization http angular

2
推荐指数
1
解决办法
8928
查看次数